android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错
Posted
技术标签:
【中文标题】android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错【英文标题】:android.view.InflateException: Error inflating class androidx.constraintlayout.widget.ConstraintLayout 【发布时间】:2020-07-28 16:02:12 【问题描述】:我有一个非常令人沮丧的错误,我无法解释。我创建了一个使用 androidx AppCompat 使其与旧版本兼容的 Android 应用程序。这是我的主要活动布局文件: Androidx。
这是我的 java 文件:
public class SplashScreen extends AppCompatActivity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
Handler handler = new Handler();
handler.postDelayed(new Runnable()
@Override
public void run()
startActivity(new Intent(SplashScreen.this, MainActivity.class));
finish();
, 1500);
这是我的 xml 文件:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="@drawable/splash_screen"
tools:context=".Activities.SplashScreen">
这是我的 gradle 文件
android
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig
applicationId "com.example.bloodbank"
minSdkVersion 15
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'
gradle 文件中的依赖项
dependencies
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
主要问题是我的应用程序说不幸的是应用程序已停止。 这是运行选项卡中的详细信息
D/skia: --- 缩放位图分配失败 D/AndroidRuntime: 关闭 VM E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.example.bloodbank,PID:3542 java.lang.RuntimeException:无法启动活动 ComponentInfocom.example.bloodbank/com.example.bloodbank.Activities.SplashScreen: android.view.InflateException:二进制 XML 文件第 2 行:错误 膨胀类 androidx.constraintlayout.widget.ConstraintLayout 在 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 文件第 2 行:错误膨胀类 androidx.constraintlayout.widget.ConstraintLayout 在 android.view.LayoutInflater.createView(LayoutInflater.java:633) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:482) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.bloodbank.Activities.SplashScreen.onCreate(SplashScreen.java:16) 在 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(Native Method) 在 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.inflate(LayoutInflater.java:482) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.bloodbank.Activities.SplashScreen.onCreate(SplashScreen.java:16) 在 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.OutOfMemoryError:无法分配 711998476 字节分配,1048576 空闲字节和 383MB 直到 OOM 在 dalvik.system.VMRuntime.newNonMovableArray(本机方法) 在 android.graphics.BitmapFactory.nativeDecodeAsset(本机方法) 在 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) 在 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 在 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988) 在 android.content.res.Resources.loadDrawableForCookie(Resources.java:2474) 在 android.content.res.Resources.loadDrawable(Resources.java:2381) 在 android.content.res.TypedArray.getDrawable(TypedArray.java:749) 在 android.view.View.(View.java:3737) 在 android.view.ViewGroup.(ViewGroup.java:497) 在 android.view.ViewGroup.(ViewGroup.java:493) 在 android.view.ViewGroup.(ViewGroup.java:489) 在 androidx.constraintlayout.widget.ConstraintLayout.(ConstraintLayout.java:575) 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 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.inflate(LayoutInflater.java:482) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.bloodbank.Activities.SplashScreen.onCreate(SplashScreen.java:16) 在 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) 进程 3542 已终止。
它在splashcreen.java
的第 16 行显示错误
请帮助我清除此错误。
谢谢
【问题讨论】:
请在定义约束布局依赖的地方添加 gradle 文件 您的代码看起来不错,但请检查您的 androidx.constraintlayout 的结束标记是否正确。它应该以 /> 结尾 结束标签正确关闭。没有语法错误。构建正确完成,但在运行应用程序时崩溃。(我在发布问题时错过了该代码的结束标记。对此感到抱歉) 我添加了我的 gradle 文件。请看一下! 您可能有一些在编辑器中看不到的特殊字符。错误很简单:InflateException: Binary XML file line #2: Error inflating class
【参考方案1】:
你实际上得到了一个OutOfMemoryException
。当您将高分辨率图像直接放在视图中时,就会发生这种情况。在你的情况下,可能是@drawable/splash_screen
。
查看this similar question。为它提供了答案。
【讨论】:
【参考方案2】:我不确定您粘贴的 XML 是否完整。如果是,那就是那里的错误。约束布局需要一个结束标签。
【讨论】:
结束标签正确关闭。我错过了把它贴在这里。以上是关于android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错的主要内容,如果未能解决你的问题,请参考以下文章