【问题标题】:Closed :Android: App keeps crashing when using com.google.android.material below android 9 (sdk 29)已关闭:Android:使用 com.google.android.material 低于 android 9 (sdk 29) 时应用程序不断崩溃
【发布时间】:2021-01-24 05:24:58
【问题描述】:

运行低于 sdk 29 的 material.io 组件时,我的应用不断崩溃。我也使用应用主题作为“Theme.MaterialComponents.Light.NoActionBar”

构建.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'
}

日志猫

com.google.android.material.textfield.TextInputLayout 引起:android.view.InflateException:二进制 XML 文件第 12 行:膨胀类 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.rInflateChildren(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(未知来源: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) 原因: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.rInflateChildren(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(未知来源: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)

【问题讨论】:

  • 请显示错误日志
  • 已添加。请检查!
  • 显示你的 style.xml
  • 我的项目中有 2 个 style.xml,并且我在 styles.xml(v21) 中更改了值,并且在我的 styles.xml 中没有更改。所以是的,我很愚蠢@IntelliJAmiya

标签: android android-studio material-design androidx material-components-android


【解决方案1】:

这不是与SDK Versions 相关的问题,而是您正在使用一个小部件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

【讨论】:

    【解决方案2】:

    这也发生在我身上。

    只需转到 res/styles.xml 并更改 AppTheme(或任何您的应用程序主题),并将其父级更改为 Theme.MaterialComponents.* 就可以了

    编辑:如果您已经在使用它,您可能需要在更改后对项目进行清理和重建

    【讨论】:

    • 我真的很笨。我的项目中有 2 个 style.xml,并且我在 styles.xml(v21) 中更改了值,并且在我的 styles.xml 中没有更改。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2013-01-15
    相关资源
    最近更新 更多