2

カスタム定義の色属性をシェイプ内で参照したいのですが、常にエラーになります。

最初に attr を宣言します。

<resources>
    <attr name="divider_color" format="color|reference" />
</resources>

私のテーマでは、値を宣言します:

 <style name="myTheme" parent="android:style/Theme.Dialog">
          <item name="divider_color">@color/red</item>
 </style>

そのようにアクセスすると、正常に動作します。

 android:background="?divider_color"/>

しかし、私はそれを形の中で使いたい:

<shape
    <gradient
        android:angle="0"
        android:centerColor="?divider_color"
        android:endColor="#00000000"
        android:startColor="#00000000"
        android:type="linear" />

</shape>

次のエラーが表示されます。

E/AndroidRuntime(3117): 原因: java.lang.UnsupportedOperationException: 色に変換できません: type=0x2

これを解決する方法はありますか?

4

3 に答える 3

0

Lまではできません。こちらをご覧ください:https ://code.google.com/p/android/issues/detail?id=26251

于 2014-07-22T10:52:15.110 に答える
0

何も思いつきません。そのため、その例外がOSのどこで発生しているかを確認しました: http://androidxref.com/4.0.4/xref/frameworks/base/core/java/android/content/res/TypedArray.java#326

307    public int getColor(int index, int defValue) {
308        index *= AssetManager.STYLE_NUM_ENTRIES;
309        final int[] data = mData;
310        final int type = data[index+AssetManager.STYLE_TYPE];
311        if (type == TypedValue.TYPE_NULL) {
312            return defValue;
313        } else if (type >= TypedValue.TYPE_FIRST_INT
314            && type <= TypedValue.TYPE_LAST_INT) {
315            return data[index+AssetManager.STYLE_DATA];
316        } else if (type == TypedValue.TYPE_STRING) {
317            final TypedValue value = mValue;
318            if (getValueAt(index, value)) {
319                ColorStateList csl = mResources.loadColorStateList(
320                        value, value.resourceId);
321                return csl.getDefaultColor();
322            }
323            return defValue;
324        }
325
326        throw new UnsupportedOperationException("Can't convert to color: type=0x"
327                + Integer.toHexString(type));
328    }

「タイプ」が正しく解釈されていないようです。このメソッドは、ここでTYPE_ATTRIBUTE見られるように、 type の属性を渡していると考えます。それは物事に答えることはありませんが、それを絞り込むのに役立つかもしれません.

于 2012-06-22T20:03:54.780 に答える
0

これは Android のバグです。これは Lollipop で修正されているため、L & M では動作するはずですが、以前のデバイスではクラッシュします。

于 2015-06-07T09:01:58.450 に答える