您的位置:首页 > 移动开发 > Android开发

android 自定义属性

2015-09-04 21:26 447 查看
在android中我们习惯了在XML布局文件中,进行控件属性的设置,由于控件默认提供的属性数量有限,为了增加属性我们可以给控件添加一些自定义的属性,下面来讲一下为控件添加自定义属性的几个步骤。

1>在res/values文件下添加一个attrs.xml文件(没有的话)如下:
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!--添加了一个ImageTextButton的属性集  --> 
    <declare-styleable name="ImageTextButton"> 
        <attr format="reference" name="iconImage" /> 
        <attr format="reference" name="bkImage" /> 
        <attr format="integer" name="borderLeft" /> 
        <attr format="integer" name="borderRight" /> 
        <attr format="integer" name="borderTop" /> 
        <attr format="integer" name="borderBottom" /> 
        <attr format="integer" name="buttonstate" /> 
        <attr name="iconLocation"> 
            <enum name="center" value="0" /> 
            <enum name="left" value="1" /> 
            <enum name="right" value="2" /> 
        </attr> 
    </declare-styleable> 
</resources>


2>在相关的XML布局文件中使用自定义的属性:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:mux="http://schemas.android.com/apk/res/com.shareboard"  
    android:layout_width="530dp"  
    android:layout_height="320dp"  
    android:background="@color/dlgBg"  
    android:orientation="vertical" >  

<!--com.shareboard 为工程所在包  --> 

            <com.shareboard.uicontrols.ImageTextButton  
                android:id="@+id/btnCancel"  
                android:layout_width="100sp"  
                android:layout_height="wrap_content"  
                android:layout_alignParentRight="true"  
                android:layout_marginRight="20dp"  
                mux:bkImage="@drawable/cell_bkgnd"  
                mux:buttonstate="2"  
                android:text="@string/btn_cancel"  
                android:textColor="@color/btnText"  
                android:textSize="@dimen/btnText" />  
  
          <com.shareboard.uicontrols.ImageTextButton  
                android:id="@+id/btnDone"  
                android:layout_width="100sp"  
                android:layout_height="wrap_content"  
                android:layout_alignParentLeft="true"  
                android:layout_marginLeft="@dimen/btnMargin"  
                mux:bkImage="@drawable/cell_bkgnd"  
                mux:buttonstate="2"  
                android:text="@string/btn_done"  
                android:textColor="@color/btnText"  
                android:textSize="@dimen/btnText" />  
</LinearLayout>


3>在代码中获取自定义的属性值:
public final class ImageTextButton extends Button { 

    private int mIconId; 
    private int mBkimgId; 
    private int mBorderLeft = 10; 
    private int mBorderRight = 10; 
    private int mBorderTop = 10; 
    private int mBorderBottom = 10; 
    private int mnButtonState = 4; 
    private int mIconLocation = 0; 
    private boolean mbChecked = false; 
 
    public ImageTextButton(Context context) { 
        super(context); 
        setClickable(true); 
    } 
 
    public ImageTextButton(Context context, AttributeSet attrs) { 
        super(context, attrs); 
        readAttrs(context, attrs); 
        setClickable(true); 
    } 
 

    private void readAttrs(Context context, AttributeSet attrs) { 
        TypedArray types = context.obtainStyledAttributes(attrs, 
                R.styleable.ImageTextButton); 
        final int count = types.getIndexCount(); 
        for (int i = 0; i < count; ++i) { 
            int attr = types.getIndex(i); 
            switch (attr) { 
            case R.styleable.ImageTextButton_iconImage: 
                mIconId = types.getResourceId(attr, 0); 
                break; 
            case R.styleable.ImageTextButton_bkImage: 
                mBkimgId = types.getResourceId(attr, 0); 
                break; 
            case R.styleable.ImageTextButton_borderLeft: 
                mBorderLeft = types.getInteger(attr, 10); 
                break; 
            case R.styleable.ImageTextButton_borderRight: 
                mBorderRight = types.getInteger(attr, 10); 
                break; 
            case R.styleable.ImageTextButton_borderTop: 
                mBorderTop = types.getInteger(attr, 10); 
                break; 
            case R.styleable.ImageTextButton_borderBottom: 
                mBorderBottom = types.getInteger(attr, 10); 
                break; 
            case R.styleable.ImageTextButton_iconLocation: 
                mIconLocation = types.getInteger(attr, 0); 
                break; 
            case R.styleable.ImageTextButton_buttonstate: 
                mnButtonState = types.getInteger(attr, 4); 
                break; 
            } 
        } 
        types.recycle(); 
    } 

}


好了这就完成了自定义属性的定义和使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: