android attr 属性自定义 应用皮肤样式

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

1>在res/values文件下添加一个attrs.xml文件(没有的话)如下:

 
 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <resources> 
  3.     <!--添加了一个ImageTextButton的属性集  --> 
  4.     <declare-styleable name="ImageTextButton"> 
  5.         <attr format="reference" name="iconImage" /> 
  6.         <attr format="reference" name="bkImage" /> 
  7.         <attr format="integer" name="borderLeft" /> 
  8.         <attr format="integer" name="borderRight" /> 
  9.         <attr format="integer" name="borderTop" /> 
  10.         <attr format="integer" name="borderBottom" /> 
  11.         <attr format="integer" name="buttonstate" /> 
  12.         <attr name="iconLocation"> 
  13.             <enum name="center" value="0" /> 
  14.             <enum name="left" value="1" /> 
  15.             <enum name="right" value="2" /> 
  16.         </attr> 
  17.     </declare-styleable> 
  18. </resources> 

2>在相关的XML布局文件中使用自定义的属性:

 
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:mux="http://schemas.android.com/apk/res/com.shareboard"  
  4.     android:layout_width="530dp"  
  5.     android:layout_height="320dp"  
  6.     android:background="@color/dlgBg"  
  7.     android:orientation="vertical" >  
  8. <!--com.shareboard 为工程所在包  --> 
  9.             <com.shareboard.uicontrols.ImageTextButton  
  10.                 android:id="@+id/btnCancel"  
  11.                 android:layout_width="100sp"  
  12.                 android:layout_height="wrap_content"  
  13.                 android:layout_alignParentRight="true"  
  14.                 android:layout_marginRight="20dp"  
  15.                 mux:bkImage="@drawable/cell_bkgnd"  
  16.                 mux:buttonstate="2"  
  17.                 android:text="@string/btn_cancel"  
  18.                 android:textColor="@color/btnText"  
  19.                 android:textSize="@dimen/btnText" />  
  20.   
  21.           <com.shareboard.uicontrols.ImageTextButton  
  22.                 android:id="@+id/btnDone"  
  23.                 android:layout_width="100sp"  
  24.                 android:layout_height="wrap_content"  
  25.                 android:layout_alignParentLeft="true"  
  26.                 android:layout_marginLeft="@dimen/btnMargin"  
  27.                 mux:bkImage="@drawable/cell_bkgnd"  
  28.                 mux:buttonstate="2"  
  29.                 android:text="@string/btn_done"  
  30.                 android:textColor="@color/btnText"  
  31.                 android:textSize="@dimen/btnText" />  
  32. </LinearLayout>  

3>在代码中获取自定义的属性值: 

 
 
  1. public final class ImageTextButton extends Button { 
  2.     private int mIconId; 
  3.     private int mBkimgId; 
  4.     private int mBorderLeft = 10
  5.     private int mBorderRight = 10
  6.     private int mBorderTop = 10
  7.     private int mBorderBottom = 10
  8.     private int mnButtonState = 4
  9.     private int mIconLocation = 0
  10.     private boolean mbChecked = false
  11.  
  12.     public ImageTextButton(Context context) { 
  13.         super(context); 
  14.         setClickable(true); 
  15.     } 
  16.  
  17.     public ImageTextButton(Context context, AttributeSet attrs) { 
  18.         super(context, attrs); 
  19.         readAttrs(context, attrs); 
  20.         setClickable(true); 
  21.     } 
  22.  
  23.     private void readAttrs(Context context, AttributeSet attrs) { 
  24.         TypedArray types = context.obtainStyledAttributes(attrs, 
  25.                 R.styleable.ImageTextButton); 
  26.         final int count = types.getIndexCount(); 
  27.         for (int i = 0; i < count; ++i) { 
  28.             int attr = types.getIndex(i); 
  29.             switch (attr) { 
  30.             case R.styleable.ImageTextButton_iconImage: 
  31.                 mIconId = types.getResourceId(attr, 0); 
  32.                 break
  33.             case R.styleable.ImageTextButton_bkImage: 
  34.                 mBkimgId = types.getResourceId(attr, 0); 
  35.                 break
  36.             case R.styleable.ImageTextButton_borderLeft: 
  37.                 mBorderLeft = types.getInteger(attr, 10); 
  38.                 break
  39.             case R.styleable.ImageTextButton_borderRight: 
  40.                 mBorderRight = types.getInteger(attr, 10); 
  41.                 break
  42.             case R.styleable.ImageTextButton_borderTop: 
  43.                 mBorderTop = types.getInteger(attr, 10); 
  44.                 break
  45.             case R.styleable.ImageTextButton_borderBottom: 
  46.                 mBorderBottom = types.getInteger(attr, 10); 
  47.                 break
  48.             case R.styleable.ImageTextButton_iconLocation: 
  49.                 mIconLocation = types.getInteger(attr, 0); 
  50.                 break
  51.             case R.styleable.ImageTextButton_buttonstate: 
  52.                 mnButtonState = types.getInteger(attr, 4); 
  53.                 break
  54.             } 
  55.         } 
  56.         types.recycle(); 
  57.     } 

attr自定义属性详解

1. reference:参考某一资源ID。
    (1)属性定义:
            <declare-styleable name = "名称">
                   <attr name = "background" format = "reference" />
            </declare-styleable>
    (2)属性使用:
            <ImageView
                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:background = "@drawable/图片ID"
                     />

2. color:颜色值。
    (1)属性定义:
            <declare-styleable name = "名称">
                   <attr name = "textColor" format = "color" />
            </declare-styleable>
    (2)属性使用:
            <TextView
                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:textColor = "#00FF00"
                     />

 3. boolean:布尔值。
    (1)属性定义:
            <declare-styleable name = "名称">
                <attr name = "focusable" format = "boolean" />
            </declare-styleable>
    (2)属性使用:
            <Button
                   android:layout_width = "42dip"
                   android:layout_height = "42dip"
                   android:focusable = "true"
                    />
 
4. dimension:尺寸值。
     (1)属性定义:
             <declare-styleable name = "名称">
                   <attr name = "layout_width" format = "dimension" />
            </declare-styleable>
    (2)属性使用:
            <Button
                   android:layout_width = "42dip"
                   android:layout_height = "42dip"
                  />

 5. float:浮点值。
    (1)属性定义:
            <declare-styleable name = "AlphaAnimation">
                   <attr name = "fromAlpha" format = "float" />
                   <attr name = "toAlpha" format = "float" />
            </declare-styleable>
    (2)属性使用:
            <alpha
                   android:fromAlpha = "1.0"
                   android:toAlpha = "0.7"
                   />
 
6. integer:整型值。
    (1)属性定义:
            <declare-styleable name = "AnimatedRotateDrawable">
                   <attr name = "visible" />
                   <attr name = "frameDuration" format="integer" />
                   <attr name = "framesCount" format="integer" />
                   <attr name = "pivotX" />
                   <attr name = "pivotY" />
                   <attr name = "drawable" />
            </declare-styleable>
    (2)属性使用:
            <animated-rotate
                   xmlns:android = "http://schemas.android.com/apk/res/android"  
                   android:drawable = "@drawable/图片ID"  
                   android:pivotX = "50%"  
                   android:pivotY = "50%"  
                   android:framesCount = "12"  
                   android:frameDuration = "100"
                   />
 
7. string:字符串。
    (1)属性定义:
            <declare-styleable name = "MapView">
                   <attr name = "apiKey" format = "string" />
            </declare-styleable>
    (2)属性使用:
            <com.google.android.maps.MapView
                    android:layout_width = "fill_parent"
                    android:layout_height = "fill_parent"
                    android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"
                    />

8. fraction:百分数。
     (1)属性定义:
            <declare-styleable name="RotateDrawable">
                   <attr name = "visible" />
                   <attr name = "fromDegrees" format = "float" />
                   <attr name = "toDegrees" format = "float" />
                   <attr name = "pivotX" format = "fraction" />
                   <attr name = "pivotY" format = "fraction" />
                   <attr name = "drawable" />
            </declare-styleable>

    (2)属性使用:
            <rotate
                 xmlns:android = "http://schemas.android.com/apk/res/android" 
               android:interpolator = "@anim/动画ID"
                 android:fromDegrees = "0" 
               android:toDegrees = "360"
                 android:pivotX = "200%"
                 android:pivotY = "300%" 
               android:duration = "5000"
                 android:repeatMode = "restart"
                 android:repeatCount = "infinite"
                />

9. enum:枚举值。
    (1)属性定义:
            <declare-styleable name="名称">
                   <attr name="orientation">
                          <enum name="horizontal" value="0" />
                          <enum name="vertical" value="1" />
                   </attr>            
            </declare-styleable>
    (2)属性使用:
            <LinearLayout
                    xmlns:android = "http://schemas.android.com/apk/res/android"
                    android:orientation = "vertical"
                    android:layout_width = "fill_parent"
                    android:layout_height = "fill_parent"
                    >
            </LinearLayout>

10. flag:位或运算。
     (1)属性定义:
             <declare-styleable name="名称">
                    <attr name="windowSoftInputMode">
                            <flag name = "stateUnspecified" value = "0" />
                            <flag name = "stateUnchanged" value = "1" />
                            <flag name = "stateHidden" value = "2" />
                            <flag name = "stateAlwaysHidden" value = "3" />
                            <flag name = "stateVisible" value = "4" />
                            <flag name = "stateAlwaysVisible" value = "5" />
                            <flag name = "adjustUnspecified" value = "0x00" />
                            <flag name = "adjustResize" value = "0x10" />
                            <flag name = "adjustPan" value = "0x20" />
                            <flag name = "adjustNothing" value = "0x30" />
                     </attr>         
             </declare-styleable>

     (2)属性使用:
            <activity
                   android:name = ".StyleAndThemeActivity"
                   android:label = "@string/app_name"
                   android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
                   <intent-filter>
                          <action android:name = "android.intent.action.MAIN" />
                          <category android:name = "android.intent.category.LAUNCHER" />
                   </intent-filter>
             </activity>
     注意:
     属性定义时可以指定多种类型值。
    (1)属性定义:
            <declare-styleable name = "名称">
                   <attr name = "background" format = "reference|color" />
            </declare-styleable>
    (2)属性使用:
             <ImageView
                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:background = "@drawable/图片ID|#00FF00"
                     />





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值