2

私は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のドキュメントで次のように示されていても、これは機能しません。

android:valueの説明

これは既知のバグですか?簡単な回避策はありますか(単純な文字列または描画可能な参照を使用する以外)?それとも私は何かが足りないのですか?Asus Transformer Prime 10.1 TF301 Tabletを使用してテストしています(Android4.0.3)。

編集

これはの問題ではないことに注意したいと思いColor.parseColor()ます。Androidはステートメントif (background != null)を入力しないため、どういうわけかメタデータは文字列としてまったく認識されません。

4

2 に答える 2

5

解決しました!これは、それ自体がAndroidのバグではなく、Androidのドキュメントのバグです(サプライズ、サプライズ!)。16進色を正しく処理するには、エスケープ文字が必要です。

<meta-data android:name="background"
           android:value="\#FF0000" />

ここに画像の説明を入力してください

于 2013-02-04T18:00:50.767 に答える
2

解決策1)値が数値ではなく文字列になるように、円記号を使用します。

解決策2)を呼び出す代わりにColor.parseColor(bundle.parseString(..))、バックスラッシュなしでgetInt(..)を使用します。

バックグラウンド:

android:value="#aabbgg"は数字です

android:value="\#aabbgg"文字列です

于 2013-02-04T18:29:55.667 に答える