我如何可靠地从AttributeSet中获取颜色?

我想创build一个自定义的类,当在一个Android XML文件中进行布局时,它将一个颜色作为它的一个属性。 然而,一种颜色可能是一种资源,或者它可能是一些直接颜色规范之一(例如hex值)。 是否有一个简单的首选方法使用AttributeSet来检索颜色,因为表示颜色的整数可能引用资源值或ARGB值?

Solutions Collecting From Web of "我如何可靠地从AttributeSet中获取颜色?"

假设您已经像这样定义了自定义颜色属性:

 <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方法将返回一个颜色值。