1

次のような独自のスタイル属性を作成します。

 <attr name="color_foreground" format="color|reference" />

そして、私はそれに次のような私のテーマの価値を与えます:

    <item name="color_foreground">@color/blue</item>

レイアウトでこれにアクセスした場合(contentViewとして設定されています)

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="?color_foreground"
>

それは魅力のように機能します。しかし、膨らんだレイアウトで同じことをすると、エラーが発生します。

        final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.myInflatedLayout, null);

エラー出力:

Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f010005 a=-1}
    06-27 20:33:37.340: E/AndroidRuntime(31616):    at android.content.res.Resources.loadDrawable(Resources.java:1899)
    06-27 20:33:37.340: E/AndroidRuntime(31616):    at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
    06-27 20:33:37.340: E/AndroidRuntime(31616):    at android.view.View.<init>(View.java:2810)
    06-27 20:33:37.340: E/AndroidRuntime(31616):    at android.widget.TextView.<init>(TextView.java:561)
    06-27 20:33:37.340: E/AndroidRuntime(31616):    at android.widget.TextView.<init>(TextView.java:554)
    06-27 20:33:37.340: E/AndroidRuntime(31616):    ... 48 more

バイナリXML行15は、実際には「?color_foreground」を介して属性にアクセスする行です。

そのような属性を取得しようとすると(コンテンツビューを設定した直後)、ほぼ同じことが起こります:

this.getResources().getColor(R.attr.color_foreground);

エラー:

06-28 12:55:16.975: E/AndroidRuntime(7089): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f010005
06-28 12:55:16.975: E/AndroidRuntime(7089):     at android.content.res.Resources.getValue(Resources.java:1019)
06-28 12:55:16.975: E/AndroidRuntime(7089):     at android.content.res.Resources.getColor(Resources.java:749)
06-28 12:55:16.975: E/AndroidRuntime(7089):     at ***.MyActivity.onCreate(AppointmentListActivity.java:66)
06-28 12:55:16.975: E/AndroidRuntime(7089):     at android.app.Activity.performCreate(Activity.java:4465)
06-28 12:55:16.975: E/AndroidRuntime(7089):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
06-28 12:55:16.975: E/AndroidRuntime(7089):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
06-28 12:55:16.975: E/AndroidRuntime(7089):     ... 11 more
4

3 に答える 3

2

問題は、私が活動の文脈に取り組んだことでした。アクティビティ自体に取り組んでも問題ありません。

于 2012-06-29T14:09:53.963 に答える
0

Resources $ NotFoundException:リソースは描画可能ではありません(色またはパス)

その例外の外観から、カスタム属性は認識されていません。おそらく、次のいずれかまたは両方を実行する必要があります。

  1. 参照をに変更しますandroid:background="?attr/color_foreground"
  2. LinearLayout定義で、カスタム属性を定義する名前空間への参照を追加します。これは、プロジェクトのパッケージ名にすぎません。xmlns:android="http://schemas.android.com/apk/res/com.my.package.name"

私の推測では、最初の提案で十分ですが、念のため、2番目の提案も試してみてください。

于 2012-06-27T19:24:39.117 に答える
-1

誰かがこの問題に再び遭遇する可能性がある場合に備えて。変化する

android:background="?color_foreground"

style="?color_foreground"

テーマでは指定できます(複数のテーマがある場合は、テーマごとに1つずつ追加しますが、色やスタイルはデザインによって異なります)

<item name="color_foreground">@color/blue</item>

また

<item name="color_foreground">@style/blue</item>

そしてあなたのスタイルで

<style name="blue">
    <item name="android:background">#0000FF</item>
</style>
于 2012-11-26T02:49:31.533 に答える