[Android]【安卓】自定义View添加XML属性
本篇博客已收录到我的安卓开发小结中——点击【安卓开发小结】
参考资料:http://blog.csdn.net/double2hao/article/details/52117503
第一步 在res–>values文件夹下创建一个myattrs.xml文件,如图:
第二步 在上面的xml里定义你要新增的xml属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyStackBarChart">
<attr name="labelYText" format="string"/>
<attr name="labelYPaddingLeft" format="float"/>
<attr name="labelYPaddingRight" format="float"/>
<attr name="labelYPaddingTop" format="float"/>
<attr name="labelYPaddingBottom" format="float"/>
</declare-styleable>
</resources>
- 第三步 将上述的xml的name关联到自定义view的构造方法
public StackBarChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyStackBarChart);
labelY1Text = typedArray.getString(R.styleable.MyStackBarChart_labelXText);
labelY1PaddingLeft = typedArray.getDimensionPixelSize(R.styleable.MyStackBarChart_labelYPaddingLeft,0);
lableY1PaddingRight = typedArray.getDimensionPixelSize(R.styleable.MyStackBarChart_labelYPaddingRight,0);
lableY1PaddingTop = typedArray.getDimensionPixelSize(R.styleable.MyStackBarChart_labelYPaddingTop,0);
lableY1PaddingBottom = typedArray.getDimensionPixelSize(R.styleable.MyStackBarChart_labelYPaddingBottom,0);
initPaint();
}
- 第四步 在目标xml声明命名空间
xmlns:my_stack="http://schemas.android.com/apk/res-auto"
- 第五步 使用自定义的xml属性
注意:自己定义的属性不会代码自动补全
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:my_stack="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.weihy.mygithubproject.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<com.example.weihy.mygithubproject.StackBarChart
android:layout_width="match_parent"
android:layout_height="match_parent"
my_stack:labelYText="hello"
my_stack:labelYPaddingLeft="10dp"
/>
</LinearLayout>