Android自定义属性

1.自定义属性需要用xml文件添加:

res/values下面添加attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="JustEditText">

        <attr name="ic_delete" format="reference" />
        <attr name="delete_x" format="integer"  />
        <attr name="delete_y" format="integer"  />
        <attr name="delete_width" format="integer"  />
        <attr name="delete_height" format="integer"  />

        <attr name="ic_left_click" format="reference" />
        <attr name="ic_left_unclick" format="reference" />
        <attr name="left_x" format="integer"  />
        <attr name="left_y" format="integer"  />
        <attr name="left_width" format="integer"  />
        <attr name="left_height" format="integer"  />

        <attr name="lineColor_click" format="color"  />
        <attr name="lineColor_unclick" format="color"  />
        <attr name="linePosition" format="integer"  />

        <attr name="cursor" format="reference" />

    </declare-styleable>
</resources>

2.代码里面引用资源文件

 TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.JustEditText);

 float textSize = typedArray.getDimension(R.styleable.JustEditText_delete_height,30);

 int textColor = typedArray.getColor(R.styleable.JustEditText_lineColor_click, ContextCompat.getColor(context,R.color.colorAccent1));

//用完之后回收
typedArray.recycle();

3.自定义属性格式详解:

  1. reference:参考某一资源ID,可以获得资源ID对象

    • 属性定义:
      <declare-styleable name = "名称">
          <attr name = "background" format = "reference" />
      </declare-styleable>
    • 使用如下:
      <ImageView
        android:layout_width = "3dp"
        android:layout_height = "3dp"
        android:background = "@drawable/图片ID"
      />

2.color:颜色值

  • 属性定义:
    <declare-styleable name = "名称">
         <attr name = "textColor" format = "color" />
    </declare-styleable>
  • 属性使用:
    <TextView
         android:layout_width = "4dp"
         android:layout_height = "4dp"
         android:textColor = "#57caa1"
    />

3.boolean:布尔值

  • 定义:
    <declare-styleable name = "名称">
           <attr name = "focusable" format = "boolean" />
    </declare-styleable>
  • 使用:
    <Button
         android:layout_width = "42dp"
         android:layout_height = "42dp"
         android:focusable = "true"
    />

4.dimension:尺寸值,获得属性值之后,将dp转化为px

  • 定义:

    <declare-styleable name = "名称">
        <attr name = "layout_width" format = "dimension" />
    </declare-styleable>
  • 使用:

    <Button
        android:layout_width = "42dp"
        android:layout_height = "42dp"
    />

5.float:浮点值,很少用一般都是integer

  • 定义:

    <declare-styleable name = "AlphaAnimation">
    
       <attr name = "fromAlpha" format = "float" />
       <attr name = "toAlpha" format = "float" />
    </declare-styleable>
  • 使用:

    <alpha
      android:fromAlpha = "1.0"
      android:toAlpha = "0.7"
    />

6.integer:整型值

  • 定义:

    <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>
  • 使用:

    <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:字符串

- 定义:
```
  • 使用:
    <MapView
      android:layout_width = "fill_parent"
     android:layout_height = "fill_parent"
     android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"
    />

8.fraction:百分数

  • 定义:

    <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>
  • 使用:

 <rotate  
      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:枚举值

  • 定义:

    <declare-styleable name="名称">
        <attr name="orientation">
        <enum name="horizontal" value="0" />
        <enum name="vertical" value="1" />
        </attr>           
    </declare-styleable>
  • 使用:

    <LinearLayout
       xmlns:android = "[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)"
       android:orientation = "vertical"
       android:layout_width = "fill_parent"
       android:layout_height = "fill_parent">
    </LinearLayout>

10.flag:位或运算

  • 定义:

    <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>
  • 用法:

    <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>

属性定义时可以制定多种类型:

 <declare-styleable name = "名称">
         <attr name = "background" format = "reference|color" />
</declare-styleable>

使用:

<ImageView
    android:layout_width = "42dip"
    android:layout_height = "42dip"
    android:background = "@drawable/图片ID|#00FF00"
/>