TextInputLayout 和 TextInputEditText 不适用于 Theme.AppCompat.Light.NoActionBar
TextInputLayout and TextInputEditText doesnt work with Theme.AppCompat.Light.NoActionBar
我想在我的应用程序中使用 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)
您不能将 AppCompat
主题与 MaterialComponents
视图一起使用。
如果您还没有准备好完全转向 MaterialComponents
主题,您可以使用相同的桥接主题。虽然,使用 Bridge 主题不是推荐的路径。在他们的官方文档中,他们说:
Doing an app-wide migration by changing your app theme to inherit from
a Material Components theme is the recommended approach. However, be
sure to test thoroughly afterwards, as components in existing layouts
may change their looks and behavior.
Note: If you can't change your theme, you can do one of the following:
Inherit from one of our Material Components Bridge themes. See the
Bridge Themes section for more details. Continue to inherit from an
AppCompat theme and add some new theme attributes to your theme. See
the App Compat Themes section for more details.
您可以通过在 MaterialComponents
主题名称前添加 .Bridge
来使用 MaterialComponents 的 Bridge 主题。
例如
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
主题中添加这些属性。
我想在我的应用程序中使用 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)
您不能将 AppCompat
主题与 MaterialComponents
视图一起使用。
如果您还没有准备好完全转向 MaterialComponents
主题,您可以使用相同的桥接主题。虽然,使用 Bridge 主题不是推荐的路径。在他们的官方文档中,他们说:
Doing an app-wide migration by changing your app theme to inherit from a Material Components theme is the recommended approach. However, be sure to test thoroughly afterwards, as components in existing layouts may change their looks and behavior.
Note: If you can't change your theme, you can do one of the following:
Inherit from one of our Material Components Bridge themes. See the Bridge Themes section for more details. Continue to inherit from an AppCompat theme and add some new theme attributes to your theme. See the App Compat Themes section for more details.
您可以通过在 MaterialComponents
主题名称前添加 .Bridge
来使用 MaterialComponents 的 Bridge 主题。
例如
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
主题中添加这些属性。