Как я могу надежно получить цвет из AttributeSet?

Я хочу создать пользовательский класс, который принимает цвет как один из его атрибутов, если он выложен в файле Android XML. Тем не менее, цвет может быть ресурсом или может быть одним из нескольких прямых спецификаций цвета (например, шестнадцатеричное значение). Есть ли простой предпочтительный метод для использования 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); int color = a.getColor(R.styleable.color_view_my_color, 0); setBackgroundColor(color); } 

На самом деле вам не нужно беспокоиться о том, как был занесен атрибут цвета, или как это

 <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 вернет значение цвета в любом случае.