почему я не могу изменить hintTextAppearance через android: theme? - PullRequest
1 голос
/ 28 февраля 2020

Здравствуйте, я новичок в android темах и стилях. Согласно официальной документации

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

Но я не могу изменить некоторые атрибуты с помощью android: тема атрибут, но я могу изменить с помощью стиль

Здесь у меня есть этот файл стиля:

<style name="Style.InputLayout" parent="Widget.Design.TextInputLayout">
    <item name="errorTextAppearance">@style/ErrorTextAppearance</item>
    <item name="hintTextAppearance">@style/HintTextAppearance</item>
    <item name="errorEnabled">true</item>
</style>
<style name="HintTextAppearance" parent="TextAppearance.Design.Hint">
    <!-- Inactive and Active label color-->
    <item name="android:textColor">?attr/colorShadow</item>
</style>

<style name="ErrorTextAppearance" parent="TextAppearance.Design.Error">
    <!-- Error text color-->
    <item name="android:textColor">?attr/colorError</item>
</style>

И у меня TextInputLayout как:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/tfUsername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Style.InputLayout"
        android:hint="Username">
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/Theme.EditText"/>

    </com.google.android.material.textfield.TextInputLayout>

Это работает, как я ожидал. Но когда я меняю атрибут style на android: theme в TextInputLayout, как показано ниже:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/tfUsername"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/Style.InputLayout"
    android:hint="Username">
    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/Theme.EditText"/>

</com.google.android.material.textfield.TextInputLayout>

Это не работает. Почему это так?

1 Ответ

0 голосов
/ 28 февраля 2020

Не работает. Почему это так?

<com.google.android.material.textfield.TextInputLayout
    android:theme="@style/Style.InputLayout"

Это не работает, потому что это неправильно . Вы можете использовать что-то вроде:

<com.google.android.material.textfield.TextInputLayout
        android:theme="@style/Style.MyColor"
        ...>

С:

  <style name="MyColor" parent="">
    <item name="colorPrimary">@color/.....</item>
  </style>

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

Дополнительную информацию можно найти в официальном документе c.

...