我想在我的应用程序中使用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)
答案 0 :(得分:1)
您不能将AppCompat
主题与MaterialComponents
视图一起使用。
如果您还没有准备好完全移至MaterialComponents
主题,则可以使用相同的过渡主题。虽然,不建议使用Bridge主题。他们在官方文档中说:
通过将应用主题更改为继承来进行应用范围内的迁移 建议使用“材料组件”主题。但是, 一定要在以后进行彻底测试,作为现有布局中的组件 可能会改变他们的容貌和行为。
注意:如果您不能更改主题,则可以执行以下操作之一:
继承自我们的材料组件桥主题之一。见 有关更多详细信息,请参见“桥梁主题”部分。继续继承 AppCompat主题,并向您的主题添加一些新的主题属性。看到 有关“ App Compat主题”部分的更多信息。
您可以通过在.Bridge
主题名称前面添加MaterialComponents
来使用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
主题中添加这些属性。