2012年10月10日水曜日

Android コードからテーマの属性値を取得する

テーマに設定されている attribute は ? を使って参照することができます。

例えば、
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:background="?android:attr/selectableItemBackground"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="wrap_content" />  
とすることで、実際の画像リソースIDではなく、テーマの属性値を指定して、その属性値に設定されているリソースを利用することができます。
  1. <style name="Theme">  
  2.     <item name="selectableItemBackground">@android:drawable/item_background</item>  
  3.     ...  
  4. </style>  


このように XML から参照するのは簡単なのですが、コードからアクセスする方法はほとんど書かれていません。

具体的には、Theme クラスの resolveAttribute() メソッドを使います。
  1. TypedValue outValue = new TypedValue();  
  2. context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);  
  3. setBackgroundResource(outValue.resourceId);  
インタラクションさせるカスタム View を作ったときに、コードから View を生成した場合でも、リストの行のようにタップしたときにデフォルトの色変化をさせたい場合に便利です。


0 件のコメント:

コメントを投稿