次のような独自のスタイル属性を作成します。
<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