关闭:Android:在 android 9 (sdk 29) 以下使用 com.google.android.material 时应用程序不断崩溃
Closed :Android: App keeps crashing when using com.google.android.material below android 9 (sdk 29)
当 运行 material.io 组件低于 sdk 29 时,我的应用程序一直崩溃。我也将应用程序主题用作“Theme.MaterialComponents.Light.NoActionBar”
Build.gradle
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.marketapplication"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.2.0'
//implementation 'com.android.support:design:28.0.0'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.github.mukeshsolanki:android-otpview-pinview:2.0.0'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
logcat
com.google.android.material.textfield.TextInputLayout
由以下原因引起:android.view.InflateException:二进制 XML 文件行 #12:膨胀 class com.google.android.material.textfield.TextInputLayout 时出错
原因:java.lang.reflect.InvocationTargetException
在 java.lang.reflect.Constructor.newInstance0(本机方法)
在 java.lang.reflect.Constructor.newInstance(Constructor.java:334)
在 android.view.LayoutInflater.createView(LayoutInflater.java:647)
在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
在 android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
在 android.view.LayoutInflater.rInflate 儿童 (LayoutInflater.java:824)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:515)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:423)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:374)
在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
在 com.example.marketapplication.activity.LoginMainActivity.onCreate(LoginMainActivity.kt:31)
在 android.app.Activity.performCreate(Activity.java:6975)
在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
在 android.app.ActivityThread.-wrap11(未知 Source:0)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
在 android.os.Handler.dispatchMessage(Handler.java:105)
在 android.os.Looper.loop(Looper.java:164)
在 android.app.ActivityThread.main(ActivityThread.java:6541)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.IllegalArgumentException: 此组件上的样式要求您的应用主题为 Theme.MaterialComponents(或后代)。
在 com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:243)
在 com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:217)
在 com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:145)
在 com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:115)
在 com.google.android.material.textfield.TextInputLayout.(TextInputLayout.java:460)
在 com.google.android.material.textfield.TextInputLayout.(TextInputLayout.java:419)
在 java.lang.reflect.Constructor.newInstance0(本机方法)
在 java.lang.reflect.Constructor.newInstance(Constructor.java:334)
在 android.view.LayoutInflater.createView(LayoutInflater.java:647)
在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
在 android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
在 android.view.LayoutInflater.rInflate 儿童 (LayoutInflater.java:824)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:515)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:423)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:374)
在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
在 com.example.marketapplication.activity.LoginMainActivity.onCreate(LoginMainActivity.kt:31)
在 android.app.Activity.performCreate(Activity.java:6975)
在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
在 android.app.ActivityThread.-wrap11(未知 Source:0)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
在 android.os.Handler.dispatchMessage(Handler.java:105)
在 android.os.Looper.loop(Looper.java:164)
在 android.app.ActivityThread.main(ActivityThread.java:6541)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我也遇到过这种情况。
只需转至 res/styles.xml 并更改 AppTheme(或您的应用程序主题的任何名称),并将其父项更改为 Theme.MaterialComponents.* 就可以了去
编辑:如果您已经在使用它,您可能需要在进行更改后清理并重建项目
这不是与 SDK Versions
相关的问题,而是您使用的 Widget com.google.android.material.textfield.TextInputLayout
是 Theme.Material Components
.
的一个组件
这就是堆栈跟踪的第一行告诉您的内容 com.google.android.material.textfield.TextInputLayout Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.google.android.material.textfield.TextInputLayout
,
在某行下面,它说:java.lang.IllegalArgumentException: The style of this component requires your app theme to be Theme.MaterialComponents (or a descendant).
这是在抱怨某种 Theme
不兼容。
简而言之,尝试将 res/styles 中的应用程序主题更改为 Theme.MaterialComponents
或避免使用其组件,如 TextInputLayout
当 运行 material.io 组件低于 sdk 29 时,我的应用程序一直崩溃。我也将应用程序主题用作“Theme.MaterialComponents.Light.NoActionBar”
Build.gradle
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.marketapplication"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.2.0'
//implementation 'com.android.support:design:28.0.0'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.github.mukeshsolanki:android-otpview-pinview:2.0.0'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
logcat
com.google.android.material.textfield.TextInputLayout 由以下原因引起:android.view.InflateException:二进制 XML 文件行 #12:膨胀 class com.google.android.material.textfield.TextInputLayout 时出错 原因:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:334) 在 android.view.LayoutInflater.createView(LayoutInflater.java:647) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 在 android.view.LayoutInflater.rInflate 儿童 (LayoutInflater.java:824) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.marketapplication.activity.LoginMainActivity.onCreate(LoginMainActivity.kt:31) 在 android.app.Activity.performCreate(Activity.java:6975) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 在 android.app.ActivityThread.-wrap11(未知 Source:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.IllegalArgumentException: 此组件上的样式要求您的应用主题为 Theme.MaterialComponents(或后代)。 在 com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:243) 在 com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:217) 在 com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:145) 在 com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:115) 在 com.google.android.material.textfield.TextInputLayout.(TextInputLayout.java:460) 在 com.google.android.material.textfield.TextInputLayout.(TextInputLayout.java:419) 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:334) 在 android.view.LayoutInflater.createView(LayoutInflater.java:647) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 在 android.view.LayoutInflater.rInflate 儿童 (LayoutInflater.java:824) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.marketapplication.activity.LoginMainActivity.onCreate(LoginMainActivity.kt:31) 在 android.app.Activity.performCreate(Activity.java:6975) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 在 android.app.ActivityThread.-wrap11(未知 Source:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我也遇到过这种情况。
只需转至 res/styles.xml 并更改 AppTheme(或您的应用程序主题的任何名称),并将其父项更改为 Theme.MaterialComponents.* 就可以了去
编辑:如果您已经在使用它,您可能需要在进行更改后清理并重建项目
这不是与 SDK Versions
相关的问题,而是您使用的 Widget com.google.android.material.textfield.TextInputLayout
是 Theme.Material Components
.
这就是堆栈跟踪的第一行告诉您的内容 com.google.android.material.textfield.TextInputLayout Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.google.android.material.textfield.TextInputLayout
,
在某行下面,它说:java.lang.IllegalArgumentException: The style of this component requires your app theme to be Theme.MaterialComponents (or a descendant).
这是在抱怨某种 Theme
不兼容。
简而言之,尝试将 res/styles 中的应用程序主题更改为 Theme.MaterialComponents
或避免使用其组件,如 TextInputLayout