Android自定义XML属性
Posted 放纵的卡尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android自定义XML属性相关的知识,希望对你有一定的参考价值。
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="RatioLayout"> <attr name="picRatio" format="float" /> <attr name="relative"> <enum name="width" value="0" /> <enum name="height" value="1" /> </attr> </declare-styleable> </resources>
上面分别写了两种典型的XML属性的配置,需要在values-attrs文件中编写。
第一种就是name,后面直接跟一个类型,这样可以在XML中自己任意配置。
第二种是枚举,这样就只能选择固定的属性了。
那么,问题来了,如何在View中对这些属性读取呢??下面介绍两种方法。
1、
<com.itheima.googleplay_8.views.RatioLayout xmlns:itheima="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="wrap_content" itheima:relative="width" itheima:picRatio="2.43" >
public RatioLayout(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RatioLayout); mPicRatio = typedArray.getFloat(R.styleable.RatioLayout_picRatio, 0); mRelative = typedArray.getInt(R.styleable.RatioLayout_relative, RELATIVE_WIDTH); typedArray.recycle(); }
2、
<com.example.myview.MyView android:id="@+id/myView1" android:layout_width="wrap_content" android:layout_height="wrap_content" yueqing:content="内容" yueqing:title="标题" > </com.example.myview.MyView>
public MyView(Context context, AttributeSet attrs) { super(context, attrs); View inflate = View.inflate(context, R.layout.myview, null); CheckBox cb = (CheckBox) inflate.findViewById(R.id.cb); TextView tv = (TextView) inflate.findViewById(R.id.tv); String content = attrs.getAttributeValue( "http://schemas.android.com/apk/res/com.example.myview", "content"); if (!cb.isChecked()) { tv.setText(content); } this.addView(inflate); int attributeCount = attrs.getAttributeCount(); System.out.println(attributeCount + ">>>>>>>>>>>>>>>>"); }
以上是关于Android自定义XML属性的主要内容,如果未能解决你的问题,请参考以下文章