我想创建一个自定义类,当在
Android XML文件中布局时,该类将颜色作为其属性之一.然而,颜色可以是资源,或者它可以是许多直接颜色规范之一(例如,十六进制值).是否有一个简单的首选方法使用AttributeSet来检索颜色,因为表示颜色的整数可以引用资源值或ARGB值?
解决方法
假设您已经定义了自定义颜色属性,如下所示:
<declare-styleable name="color_view"> <attr name="my_color" format="color" /> </declare-styleable>
然后在视图的构造函数中,您可以检索如下颜色:
public ColorView(Context context,AttributeSet attrs) { super(context,attrs); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.color_view); try { int color = a.getColor(R.styleable.color_view_my_color,0); setBackgroundColor(color); } finally { a.recycle(); } }
您实际上不必担心颜色属性是如何填充的,就像这样
<com.test.ColorView android:layout_width="match_parent" android:layout_height="match_parent" app:my_color="#F00" />
或者像这样:
<com.test.ColorView android:layout_width="match_parent" android:layout_height="match_parent" app:my_color="@color/red" />
getColor方法在任何情况下都将返回颜色值.