美文网首页
Android自定义属性

Android自定义属性

作者: ccccccal | 来源:发表于2018-01-09 13:55 被阅读20次

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

相关文章

网友评论

      本文标题:Android自定义属性

      本文链接:https://www.haomeiwen.com/subject/pldwnxtx.html