Android自定義屬性

weixin_33890499發表於2018-01-09

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

  1. string:字串
  • 定義:
<declare-styleable name = "MapView">
    <attr name = "apiKey" format = "string" />
</declare-styleable>
  • 使用:
 <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"
/>

相關文章