TextInputLayout и TextInputEditText не работают с Theme.AppCompat.Light.NoActionBar - PullRequest
1 голос
/ 06 июня 2019

Я хочу использовать TextInputEditText и TextInputLayout в моем приложении, но оно не будет работать с Theme.AppCompat.Light.NoActionBar.Но если я установлю Theme.MaterialComponents.Light.NoActionBar, он будет работать без проблем, но это уничтожит все мои стили в приложении.

Использование в XML:

<com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/nameLayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    style="@style/reg_edit_text_style"
                    app:errorEnabled="true"
                    android:hint="@string/name">

                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/nameEt"
                        android:layout_width="match_parent"
                        android:nextFocusDown="@id/lastNameEt"
                        android:inputType="text"
                        style="@style/reg_edit_text_inner_style"/>

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

В build.gradle:

implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'androidx.appcompat:appcompat:1.0.2'

Ошибка:

 Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
    at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:240)
    at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:215)
    at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:143)

1 Ответ

1 голос
/ 06 июня 2019

Вы не можете использовать AppCompat темы с MaterialComponents представлениями.

Если вы не готовы полностью перейти на тему MaterialComponents, вы можете использовать ту же тему моста. Хотя использование темы моста не рекомендуется. В своей официальной документации они говорят:

Выполнение миграции всего приложения путем изменения темы приложения для наследования от тема Материальных компонентов - рекомендуемый подход. Однако быть обязательно тщательно протестировать впоследствии, как компоненты в существующих макетах может изменить свою внешность и поведение.

Примечание. Если вы не можете изменить тему, вы можете выполнить одно из следующих действий:

Наследовать от одной из наших тем Bridge Material Components. Увидеть Раздел Темы моста для более подробной информации. Продолжать наследовать от Тема AppCompat и добавьте некоторые новые атрибуты темы в вашу тему. Увидеть раздел «Compat Themes» для более подробной информации.

Вы можете использовать темы мостов Материальных компонентов, добавив .Bridge перед MaterialComponents названием темы.

например.

Theme.MaterialComponents.*.Bridge

В вашем случае это будет Theme.MaterialComponents.Light.NoActionBar.Bridge

Несмотря на то, Если вы хотите продолжать использовать темы AppCompat, вам нужно добавить следующие несколько атрибутов в вашу текущую тему, или она выдаст Theme Enforcement Error, который вы получаете прямо сейчас.

<item name="colorPrimaryVariant">@color/my_app_primary_variant_color</item>
  <item name="colorSecondaryVariant">@color/my_app_secondary_variant_color</item>
  <item name="colorSurface">@color/my_app_surface_color</item>
  <item name="colorOnPrimary">@color/my_app_color_on_primary</item>
  <item name="colorOnSecondary">@color/my_app_color_on_secondary</item>
  <item name="colorOnBackground">@color/my_app_color_on_background</item>
  <item name="colorOnError">@color/my_app_color_on_error</item>
  <item name="colorOnSurface">@color/my_app_color_on_surface</item>
  <item name="scrimBackground">@color/mtrl_scrim_color</item>
  <item name="textAppearanceHeadline1">@style/TextAppearance.MaterialComponents.Headline1</item>
  <item name="textAppearanceHeadline2">@style/TextAppearance.MaterialComponents.Headline2</item>
  <item name="textAppearanceHeadline3">@style/TextAppearance.MaterialComponents.Headline3</item>
  <item name="textAppearanceHeadline4">@style/TextAppearance.MaterialComponents.Headline4</item>
  <item name="textAppearanceHeadline5">@style/TextAppearance.MaterialComponents.Headline5</item>
  <item name="textAppearanceHeadline6">@style/TextAppearance.MaterialComponents.Headline6</item>
  <item name="textAppearanceSubtitle1">@style/TextAppearance.MaterialComponents.Subtitle1</item>
  <item name="textAppearanceSubtitle2">@style/TextAppearance.MaterialComponents.Subtitle2</item>
  <item name="textAppearanceBody1">@style/TextAppearance.MaterialComponents.Body1</item>
  <item name="textAppearanceBody2">@style/TextAppearance.MaterialComponents.Body2</item>
  <item name="textAppearanceCaption">@style/TextAppearance.MaterialComponents.Caption</item>
  <item name="textAppearanceButton">@style/TextAppearance.MaterialComponents.Button</item>
  <item name="textAppearanceOverline">@style/TextAppearance.MaterialComponents.Overline</item>

Вам необходимо добавить эти атрибуты в текущую тему AppCompat.

...