mar*_*337 5 android android-layout android-textinputlayout
我想在我的应用程序中使用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>
Run Code Online (Sandbox Code Playgroud)
在build.gradle:
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'androidx.appcompat:appcompat:1.0.2'
Run Code Online (Sandbox Code Playgroud)
错误:
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)
Run Code Online (Sandbox Code Playgroud)
您不能将AppCompat主题与MaterialComponents视图一起使用。
如果您还没有准备好完全转移到MaterialComponents主题,您可以使用相同的桥接主题。尽管如此,使用 Bridge 主题并不是推荐的途径。在他们的官方文件中,他们说:
建议的方法是通过更改应用程序主题以继承 Material Components 主题来进行应用程序范围的迁移。但是,请务必事后彻底测试,因为现有布局中的组件可能会改变其外观和行为。
注意:如果您无法更改主题,可以执行以下操作之一:
继承我们的 Material Components Bridge 主题之一。有关更多详细信息,请参阅“桥梁主题”部分。继续继承 AppCompat 主题并向您的主题添加一些新的主题属性。有关更多详细信息,请参阅应用程序兼容性主题部分。
.Bridge您可以通过在主题名称前添加来使用 MaterialComponents 的 Bridge 主题MaterialComponents。
例如。
Theme.MaterialComponents.*.Bridge
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它会是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>
Run Code Online (Sandbox Code Playgroud)
您需要在当前AppCompat主题中添加这些属性。
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |