Использование пользовательских атрибутов в макете приложения вылетает - PullRequest
1 голос
/ 10 января 2020

Я создаю приложение Android и пытаюсь применить пользовательские темы и хочу использовать некоторые пользовательские атрибуты.

Я определил атрибуты в attrs.xml как например:

<resources>
    <attr name="baseColor" format="reference" />
    <attr name="accentColor" format="reference" />
</resources>

и в моем styles.xml я добавил следующие значения в свою тему:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="android:textColor">@android:color/black</item>
        <item name="android:windowNoTitle">true</item>
        <item name="colorAccent">@color/blue_color</item>
        <item name="android:colorPrimaryDark" tools:targetApi="lollipop">@color/blue_color</item>

        <item name="baseColor">@color/blue_color</item>
        <item name="accentColor">@color/red_color</item>
</style>

Наконец, в моем XML макете я применяю эти атрибуты на кнопке как таковые:

<androidx.appcompat.widget.AppCompatButton
            android:id="@+id/sign_up_button"
            android:background="?attr/accentColor"
            android:textColor="?attr/baseColor"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="@string/sign_up_button" />

Однако, когда я запускаю мое приложение, оно вылетает с java.lang.UnsupportedOperationException: Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f040046 a=-1}, что, конечно, означает, что мой пользовательский атрибут не был найден. Я что-то упустил? Я уже определил цвета и атрибуты в своей теме и применил эту тему к своей деятельности в моем манифесте. Полная трассировка стека может быть найдена здесь

Ответы [ 2 ]

1 голос
/ 14 января 2020

Таким образом, выясняется, что в аварийном событии использовалась другая тема, у которой не было пользовательских атрибутов. Я удалил пользовательскую тему из манифеста, и атрибуты работают как положено, поскольку они определены в глобальной теме моего приложения.

0 голосов
/ 10 января 2020

Для вашей пользовательской кнопки вам нужно объявить styleable в attrs. xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="UpdateButton">
    <attr name="setType" format="string" />
    <attr name="setContent" format="string"/>

  </declare-styleable>
</resources>

Ваше настраиваемое имя является именем класса вашего пользовательского представления.

Создание View Class

Для создания пользовательской темы для расширения вашего комментария вы можете менять темы, а не использовать атрибуты. xml

Изменение текущей темы во время выполнения - Stackoverflow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...