我创建了我自己的样式属性:
<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
Binary XML Line 15实际上就是我通过“?color_foreground”访问attr的行
如果我尝试获取类似的属性(在设置内容视图后立即),几乎会发生同样的情况:
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
答案 0 :(得分:2)
问题是,我参与了活动的背景。如果我自己处理活动,它不会造成任何问题。
答案 1 :(得分:0)
资源$ NotFoundException:资源不是Drawable(颜色或路径)
从该异常的外观中,您的自定义属性无法识别。您可能需要执行以下一项或两项操作:
android:background="?attr/color_foreground"
。LinearLayout
定义中,添加对定义自定义属性的命名空间的引用,该命名空间只是项目的包名称:xmlns:android="http://schemas.android.com/apk/res/com.my.package.name"
我的猜测是第一个建议就足够了,但为了以防万一,您也可以尝试第二个建议。
答案 2 :(得分:-1)
如果有人可能再次遇到此问题。变化
android:background="?color_foreground"
到
style="?color_foreground"
并且在主题中你可以指定(如果你有多个主题,你将在每个主题中逐个添加,但不同的颜色/样式,取决于你的设计)
<item name="color_foreground">@color/blue</item>
或
<item name="color_foreground">@style/blue</item>
并以您的风格
<style name="blue">
<item name="android:background">#0000FF</item>
</style>