问题描述
我将Material TextInputLayout与OutlinedBox样式一起使用
@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox
当启动仿真器“不幸已停止”时,它不起作用。
implementation 'com.google.android.material:material:1.2.0'
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="15dp"
android:paddingRight="15dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
错误运行活动日志
E / Android运行时:致命异常:主要 流程:com.mcic.drawer,PID:8832 java.lang.RuntimeException:无法启动活动ComponentInfo {com.mcic.drawer / com.mcic.drawer.MainActivity}:android.view.InflateException:二进制XML文件第19行:膨胀类com.google.android.material的错误.textfield.TextInputLayout 在android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2325) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 原因:android.view.InflateException:二进制XML文件第19行:膨胀类com.google.android.material.textfield.TextInputLayout的错误 在android.view.LayoutInflater.createView(LayoutInflater.java:633) 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696) 在androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170) 在com.mcic.drawer.MainActivity.onCreate(MainActivity.kt:9) 在android.app.Activity.performCreate(Activity.java:5990) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2278) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 造成原因:java.lang.reflect.InvocationTargetException 在java.lang.reflect.Constructor.newInstance(本地方法) 在java.lang.reflect.Constructor.newInstance(Constructor.java:288) 在android.view.LayoutInflater.createView(LayoutInflater.java:607) 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696) 在androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170) 在com.mcic.drawer.MainActivity.onCreate(MainActivity.kt:9) 在android.app.Activity.performCreate(Activity.java:5990) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2278) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 原因:java.lang.IllegalArgumentException:此组件上的样式要求您的应用程序主题为Theme.MaterialComponents(或后代)。 在com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:248) 在com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:222) 在com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:150) 在com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:120) 在com.google.android.material.textfield.TextInputLayout。(TextInputLayout.java:424) 在com.google.android.material.textfield.TextInputLayout。(TextInputLayout.java:396) 在java.lang.reflect.Constructor.newInstance(本地方法) 在java.lang.reflect.Constructor.newInstance(Constructor.java:288) 在android.view.LayoutInflater.createView(LayoutInflater.java:607) 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696) 在androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170) 在com.mcic.drawer.MainActivity.onCreate(MainActivity.kt:9) 在android.app.Activity.performCreate(Activity.java:5990) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2278) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
解决方法
如果查看运行输出,您将看到:
此组件上的样式要求您的应用主题为 Theme.MaterialComponents
因此我们可以更改从Theme.MaterialComponents
继承的应用主题:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar.Bridge">
详细说明是here。