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

转载 2015年11月20日 18:26:01

在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"
                     />





Android中attr自定义标签详解

xmlns:wen=http://schemas.android.com/apk/res/com.iteye.googlers     android:orientation="vertical...

获取自定义主题(attr.xml)中的定义的图片(Drawable)

获取自定义主题(attr.xml)中的定义的图片(Drawable) 从事安卓开发一周学到了很多东西。一个刚刚从学校毕业的菜鸟想要变成编程达人注定不是一条容易的路。争取每天写下一点工作心得或者收货。 ...

android中?attr/**与@drawable/**或@color/**等的区别

今天在写一个Demo的时候,突然遇到?attr/colorPrimary这个用法,一百度,竟然全网都是同一篇文章, 我苦思冥想,最终还搬出了Android源码,终于知道了意思,暂且记下来,作为备...

Android attr属性的定义/读取/出错/使用

有人认为它可以直接通过在代码类中进行set...(),然后去改变View中的字体大小,颜色等等属性。 那如果要直接在引用布局Layout对其进行设置属性该怎么办呢? 这就是本文重点要介绍的内容:自定义...

android 中的Style、Themes以及attr

声明:本文主要是参考 android官方API说明文档来的。 在开篇先说明下,本篇中所说的样式不是指Style,样式包括Style和Theme。Style和Theme都是定义样式的,只不过Style是...

Android 自定义 attr属性

最近在封装一些 自定义的View 遇到了一些 自定义attr 属性的问题, 这里来复习总结下: 1. 定义attire 属性 在res/values  文件下新建一个attrs.x...

解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限

转载请注明:http://blog.csdn.net/hubbybob1/article/details/50263925 很多Android的应用在使用usb设备时,尤其是usb摄像头,前段时...

按下电源键到启动Home应用过程详解(三)

一: 这篇将分析手机从加电那一刻到Home应用启动的过程,如下图简要描述了启动过程 system_server在开启核心服务的时候,其中有一个服务是ActivityManagerService,简称...

Android自定义Attr属性

  • 2013年10月01日 21:08
  • 39KB
  • 下载

Android自定义属性,attr format取值类型

1. reference:参考某一资源ID。      (1)属性定义:                                                       (2)属...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android attr 属性自定义 应用皮肤样式
举报原因:
原因补充:

(最多只允许输入30个字)