9

Android XMLファイルにレイアウトするときに、属性の1つとして色を使用するカスタムクラスを作成したいと思います。ただし、色はリソースである場合もあれば、いくつかの直接色仕様(16進値など)の1つである場合もあります。AttributeSet色を表す整数はリソース値またはARGB値のいずれかを参照できるため、色を取得するために使用する簡単な推奨方法はありますか?

4

1 に答える 1

27

次のようにカスタムカラー属性を定義したとします。

<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メソッドは、どのような場合でも色の値を返します。

于 2012-11-22T12:58:52.410 に答える