私はAndroidでいくつかのメタデータを機能させることに取り組んでいます。具体的には、次の形式でビューの背景を設定するためのアプリケーションレベルのメタデータを取得しています。
<meta-data android:name="background"
android:value="red" />
<meta-data android:name="background"
android:resource="@drawable/my_red_background" />
<meta-data android:name="background"
android:value="#FF0000" />
次のコードを使用して情報を解析しています。
ApplicationInfo app = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle metaData = app.metaData;
if (metaData != null) {
int resourceID = metaData.getInt("background", -1);
if (resourceID != -1) {
//set the background resource of my view (THIS WORKS)
}
else {
String background = metaData.getString("background");
if (background != null) {
try {
backgroundColor = Color.parseColor(background);
//Set background color (THIS WORKS for 'red', 'blue', etc.)
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
リソースメソッドを使用してそれをドローアブルに向けると、これは機能します。「赤」、「青」、「黄色」などのカラー文字列を使用すると、これらも機能します。ただし、ハッシュマークが前に付いた形式(#FF0000、#FFFF0000など)のいずれかで色を使用しようとすると、Androidのドキュメントで次のように示されていても、これは機能しません。
これは既知のバグですか?簡単な回避策はありますか(単純な文字列または描画可能な参照を使用する以外)?それとも私は何かが足りないのですか?Asus Transformer Prime 10.1 TF301 Tabletを使用してテストしています(Android4.0.3)。
編集
これはの問題ではないことに注意したいと思いColor.parseColor()
ます。Androidはステートメントif (background != null)
を入力しないため、どういうわけかメタデータは文字列としてまったく認識されません。