-1

我想通过引用设置参数。就我而言,它是由 custom app 切换的颜色Theme。问题是在我的代码中的一个地方它正在抛出UnsupportedOperationException,但在其他地方它工作正常。我在 50 个不同的地方使用它,但只是在这个布局中,它不起作用。可能的问题是它的布局被LayoutInflater.

attr.xml这是我在->中的颜色名称

<attr name="bgColor" format="reference"/>

styles.xml这是我的自定义内部的用法Theme

<style name="AppThemeBlueDark" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
   ...
   <item name="bgColor">@color/darkred</item>
   ...
</style>

以下是 XML 布局中此引用颜色的用法:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="52dp"
    android:gravity="center"
    android:background="?attr/bgColor">
    ...
    Other Views
    ...
</LinearLayout>

例外:

Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f030051 a=-1}
        at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:946)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
        at android.view.View.<init>(View.java:5012)
        at android.view.ViewGroup.<init>(ViewGroup.java:660)
        at android.widget.LinearLayout.<init>(LinearLayout.java:244)
        at android.widget.LinearLayout.<init>(LinearLayout.java:240)
        at android.widget.LinearLayout.<init>(LinearLayout.java:236)
4

1 回答 1

0

更改以下行

<attr name="bgColor" format="reference"/>

<attr name="bgColor" format="color"/>

并使用 android:backgroundTint="?attr/bgColor" insted ofandroid:background="?attr/bgColor"

于 2019-10-21T05:32:20.310 回答