Установка параметра по ссылке вызывает исключение UnsupportedOperationException - PullRequest
0 голосов
/ 21 октября 2019

Я хочу установить параметры по ссылке. В моем случае, это цвет, который будет переключаться с помощью пользовательского приложения 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)

1 Ответ

0 голосов
/ 21 октября 2019

Изменить ниже строки

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

на

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

И использовать android:backgroundTint="?attr/bgColor" вместо android:background="?attr/bgColor"

...