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

And*_*yld 8 xml parsing android colors

我想创建一个自定义类,当在Android XML文件中布局时,该类将颜色作为其属性之一.但是,颜色可以是资源,也可以是多种直接颜色规范之一(例如十六进制值).是否有一个简单的首选方法用于AttributeSet检索颜色,因为表示颜色的整数可以指代资源值或ARGB值?

sda*_*bet 24

假设您已经定义了自定义颜色属性,如下所示:

<declare-styleable name="color_view">
    <attr name="my_color" format="color" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

然后在视图的构造函数中,您可以检索如下颜色:

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();
   }
}
Run Code Online (Sandbox Code Playgroud)

你实际上不必担心如何填充颜色属性,就像这样

<com.test.ColorView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:my_color="#F00"
    />
Run Code Online (Sandbox Code Playgroud)

或者像这样:

<com.test.ColorView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:my_color="@color/red"
    />
Run Code Online (Sandbox Code Playgroud)

getColor在任何情况下,该方法都将返回颜色值.

  • 不要忘记回收你的`TypedArray`. (10认同)
  • 太棒了,谢谢你!(很好用`#F00` :)) (3认同)