膨胀类 com.google.android.material.textfield.TextInputLayout 时出错
Posted
技术标签:
【中文标题】膨胀类 com.google.android.material.textfield.TextInputLayout 时出错【英文标题】:Error inflating class com.google.android.material.textfield.TextInputLayout 【发布时间】:2019-11-29 17:22:45 【问题描述】:这是我的应用主题:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
我收到了一个因未使用所需主题而导致的膨胀错误。在Manifest
中我没有覆盖我收到此错误的活动的主题,因此使用styles.xml
中定义的AppTheme。
错误:
android.view.InflateException: Binary XML file line #122: Binary XML file line #122: Error inflating class com.google.android.material.textfield.TextInputLayout
Caused by: android.view.InflateException: Binary XML file line #122: Error inflating class com.google.android.material.textfield.TextInputLayout
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
...
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
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)
at com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:116)
这是我的 xml:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputFirstName"
style="@style/EditText.OutlinedBox"
android:layout_
android:layout_
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="16dp"
android:visibility="gone"
app:boxStrokeColor="@color/colorBrand"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
和 EditText 样式:
<style name="EditText.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:minHeight">56dp</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">@font/nunito_regular</item>
<item name="android:textColorHint">@color/colorTextSecondary</item>
<item name="hintTextColor">@color/colorBrand</item>
<item name="hintEnabled">true</item>
</style>
应用的目标sdk是29,我使用material_design_components_version = '1.1.0-alpha08'
编辑:
来自app/gradle
implementation(
"androidx.appcompat:appcompat:$appcompat_version",
"androidx.constraintlayout:constraintlayout:$constraintlayout_version",
"com.google.android.material:material:$material_design_components_version"
)
清单:
<application
android:name=".application.BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
主题:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:fontFamily">@font/nunito_regular</item>
<item name="android:lineSpacingExtra">0dp</item>
<item name="android:includeFontPadding">false</item>
<item name="navigationIcon">@drawable/ic_back_dark</item>
<item name="android:windowBackground">@color/colorWhite</item>
<item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
</style>
【问题讨论】:
将 android:theme="Theme.MaterialComponents" 添加到布局中。 不工作,崩溃并显示相同的消息 请向我们展示您的设计参考在 gradle 中的样子。看起来您正在混合 appcompat 和 androidx。请添加清单的外观 - 特别是应用程序主题。 @ror 我已经添加了详细信息 嗯,是不是您的 AppTheme 对不同的 sdk 版本有不同的表示,并且对于您正在测试的版本没有正确继承? @ghita 【参考方案1】:尝试在父布局中应用这种样式:
android:theme="@style/Theme.MaterialComponents.DayNight.DarkActionBar"
<LinearLayout
android:layout_
android:layout_
android:layout_centerInParent="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical"
android:theme="@style/Theme.MaterialComponents.DayNight.DarkActionBar">
<com.google.android.material.textfield.TextInputLayout
android:layout_
android:layout_
<com.google.android.material.textfield.TextInputEditText
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
这是一个例子,为了完整的使用,把你的应用样式放在父级中,例子:
<style name="MyApp" parent="Theme.MaterialComponents">
【讨论】:
在布局中设置主题可能是一个有用的调试工具。但是,典型的应用程序会在 AndroidManifest.xml 中设置应用程序范围的主题。此主题通常在values/themes.xml
中定义,并且应该有 Theme.MaterialComponents.DayNight.DarkActionBar
的父主题(或类似主题)。【参考方案2】:
我实现了这个:
implementation 'com.google.android.material:material:1.0.0'
然后我将样式从:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
收件人:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
【讨论】:
【参考方案3】: launchFragmentInContainer<LoginFragment>(themeResId =R.style.AppTheme)
在构造函数中添加主题!!
【讨论】:
这是我唯一要做的事情。工作就像一个魅力,谢谢! @renatoarg 欢迎您,很高兴听到它对某人有所帮助。 感谢您分享解决方案。我的救生员。【参考方案4】:问题出在材质版本上。 尝试更改您的版本 alpha06,它应该可以修复它:
implementation 'com.google.android.material:material:1.1.0-alpha06'
【讨论】:
不,问题是文本输入在对话框内,我用于对话框的上下文是打开对话框的活动上下文而不是片段上下文 这对我来说似乎很好用。谢谢。【参考方案5】:检查您的主题继承,在我的情况下,我使用材质组件继承的浅色主题和来自 material3 的深色主题
【讨论】:
以上是关于膨胀类 com.google.android.material.textfield.TextInputLayout 时出错的主要内容,如果未能解决你的问题,请参考以下文章
膨胀类 CollapsingToolbarLayout 时出错
如何为android修复“错误膨胀类GeckoEngineView”