Android 自定义attribution使用

30 篇文章 0 订阅
自定义Attribution的使用

使用分为三步

第一步在attr中添加自定义的属性,如下所示

<resources>
    <declare-styleable name="PreferenceWithTip">
            <attr name="tipstring" format="string|reference"/>
            <attr name="titlestring" format="string"/>
            <attr name="img" format="reference"/>
            <attr name="hint" format="string"/>
    </declare-styleable>
    <declare-styleable name="MyTextView">
        <attr name="hintColor" format="reference"/>
        <attr name="hintText" format="string"/>
        <attr name="text" format="string"/>
        <attr name="isSwitchabled" format="boolean"/>
    </declare-styleable>

</resources>

第二步在自定义的view代码中获取自定义属性的值,并将值赋给所需要的控件

    //成员变量的声明
    String pTitle = null;
    String tipstring = null;
    Drawable res=null;
    String hinttext=null;

    //构造方法中通过TypedArray获取属性的值
    //使用时需要添加Recycle的注解
    @SuppressLint("Recycle")
    public PreferenceWithTip(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PreferenceWithTip);
        tipstring = ta.getString(R.styleable.PreferenceWithTip_tipstring);
        pTitle = ta.getString(R.styleable.PreferenceWithTip_titlestring);
        res=ta.getDrawable(R.styleable.PreferenceWithTip_img);
        hinttext=ta.getString(R.styleable.PreferenceWithTip_hint);
        //使用完需要调用recycle
        ta.recycle();
    }
		…………
		//然后在对应的地方获取控件,然后赋值给控件
		TextView pTitleView = (TextView)view.findViewById(R.id.prefs_title);
    pTitleView.setText(pTitle);
    TextView pTipView = (TextView)view.findViewById(R.id.prefs_tip);
    pTipView.setText(tipstring);
    ImageView imageView=(ImageView)view.findViewById(R.id.prefs_icon);
    imageView.setImageDrawable(res);
    TextView hint=(TextView)view.findViewById(R.id.prefs_hint);
    hint.setText(hinttext);

第三部就是使用了,使用有两种方式,一种是直接在xml代码中使用,另一种则是在自定义的view中对外暴露方法,通过setxx方法的方式传入

1.xml方法,如下所示

<com.example.gaotudemo.PreferenceWithTip
    preference:tipstring=">"
    preference:titlestring="课程兑换"
    preference:hint="暂无可用券"
    preference:img="@drawable/duihuan"/>

2.方法调用。

public void setHintText(String hintText){
    if(hintText!=null)  hint.setText(this.hintText);
}
使用注意事项:

1.attr中的format可以同时使用多个

如 所示,既能传入string类型,也能传入引用类型

2.那么如果同时传入引用类型和其他类型,如何判断呢?

以上一个的例子来说名,通过TypedArray,可以判断如果是string类型,则直接传入。

如果是引用类型,传入的该id,typearray首先会接受id,然后解析该id获取该id所指向的资源,最后返回该资源。

常见的attri格式

(参考https://www.jianshu.com/p/8c100000a1a2)

1. reference:参考某一资源ID
  • 属性定义:
<declare-styleable name="名称">
    <attr name="background" format="reference" />
</declare-styleable>
  • 属性使用:
<ImageView
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:background="@drawable/图片ID" />
2. color:颜色值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="textColor" format="color" />
</declare-styleable>
  • 属性使用:
<TextView
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:textColor="#00FF00" />
  • 代码使用
3. boolean:布尔值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="focusable" format="boolean" />
</declare-styleable>
  • 属性使用:
<Button
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:focusable="true" />
4. dimension:尺寸值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="layout_width" format="dimension" />
</declare-styleable>
  • 属性使用:
<Button
    android:layout_width="42dip"
    android:layout_height="42dip" />
5. float:浮点值
  • 属性定义:
<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:frameDuration="100"
    android:framesCount="12"
    android:pivotX="50%"
    android:pivotY="50%" />
7. string:字符串
  • 属性定义:
<declare-styleable name="MapView">
    <attr name="apiKey" format="string" />
</declare-styleable>
  • 属性使用:
<com.google.android.maps.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
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromDegrees="0"
    android:interpolator="@anim/动画ID"
    android:pivotX="200%"
    android:pivotY="300%"
    android:repeatCount="infinite"
    android:repeatMode="restart"
    android:toDegrees="360" />
9. enum:枚举值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="orientation">
        <enum name="horizontal" value="0" />
        <enum name="vertical" value="1" />
    </attr>
</declare-styleable>
  • 属性使用:
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" />
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" />

```#### 自定义Attribution的使用

使用分为三步

第一步在attr中添加自定义的属性,如下所示

```

第二步在自定义的view代码中获取自定义属性的值,并将值赋给所需要的控件

    //成员变量的声明
    String pTitle = null;
    String tipstring = null;
    Drawable res=null;
    String hinttext=null;

    //构造方法中通过TypedArray获取属性的值
    //使用时需要添加Recycle的注解
    @SuppressLint("Recycle")
    public PreferenceWithTip(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PreferenceWithTip);
        tipstring = ta.getString(R.styleable.PreferenceWithTip_tipstring);
        pTitle = ta.getString(R.styleable.PreferenceWithTip_titlestring);
        res=ta.getDrawable(R.styleable.PreferenceWithTip_img);
        hinttext=ta.getString(R.styleable.PreferenceWithTip_hint);
        //使用完需要调用recycle
        ta.recycle();
    }
		…………
		//然后在对应的地方获取控件,然后赋值给控件
		TextView pTitleView = (TextView)view.findViewById(R.id.prefs_title);
    pTitleView.setText(pTitle);
    TextView pTipView = (TextView)view.findViewById(R.id.prefs_tip);
    pTipView.setText(tipstring);
    ImageView imageView=(ImageView)view.findViewById(R.id.prefs_icon);
    imageView.setImageDrawable(res);
    TextView hint=(TextView)view.findViewById(R.id.prefs_hint);
    hint.setText(hinttext);

第三部就是使用了,使用有两种方式,一种是直接在xml代码中使用,另一种则是在自定义的view中对外暴露方法,通过setxx方法的方式传入

1.xml方法,如下所示

<com.example.gaotudemo.PreferenceWithTip
    preference:tipstring=">"
    preference:titlestring="课程兑换"
    preference:hint="暂无可用券"
    preference:img="@drawable/duihuan"/>

2.方法调用。

public void setHintText(String hintText){
    if(hintText!=null)  hint.setText(this.hintText);
}
使用注意事项:

1.attr中的format可以同时使用多个

如 所示,既能传入string类型,也能传入引用类型

2.那么如果同时传入引用类型和其他类型,如何判断呢?

以上一个的例子来说名,通过TypedArray,可以判断如果是string类型,则直接传入。

如果是引用类型,传入的该id,typearray首先会接受id,然后解析该id获取该id所指向的资源,最后返回该资源。

常见的attri格式

(参考https://www.jianshu.com/p/8c100000a1a2)

1. reference:参考某一资源ID
  • 属性定义:
<declare-styleable name="名称">
    <attr name="background" format="reference" />
</declare-styleable>
  • 属性使用:
<ImageView
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:background="@drawable/图片ID" />
2. color:颜色值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="textColor" format="color" />
</declare-styleable>
  • 属性使用:
<TextView
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:textColor="#00FF00" />
  • 代码使用
3. boolean:布尔值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="focusable" format="boolean" />
</declare-styleable>
  • 属性使用:
<Button
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:focusable="true" />
4. dimension:尺寸值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="layout_width" format="dimension" />
</declare-styleable>
  • 属性使用:
<Button
    android:layout_width="42dip"
    android:layout_height="42dip" />
5. float:浮点值
  • 属性定义:
<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:frameDuration="100"
    android:framesCount="12"
    android:pivotX="50%"
    android:pivotY="50%" />
7. string:字符串
  • 属性定义:
<declare-styleable name="MapView">
    <attr name="apiKey" format="string" />
</declare-styleable>
  • 属性使用:
<com.google.android.maps.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
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromDegrees="0"
    android:interpolator="@anim/动画ID"
    android:pivotX="200%"
    android:pivotY="300%"
    android:repeatCount="infinite"
    android:repeatMode="restart"
    android:toDegrees="360" />
9. enum:枚举值
  • 属性定义:
<declare-styleable name="名称">
    <attr name="orientation">
        <enum name="horizontal" value="0" />
        <enum name="vertical" value="1" />
    </attr>
</declare-styleable>
  • 属性使用:
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" />
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" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值