android - 膨胀类 androidx.constraintlayout.widget.ConstraintLayout 的运行时错误
问题描述
我创建了一个使用 Androidx 的 Android 应用程序。我正在尝试运行我的 Android 应用程序,但是当它尝试启动登录活动时出现此运行时错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sportincenterapp, PID: 7414
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sportincenterapp/com.example.sportincenterapp.LoginActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
at android.view.LayoutInflater.createView(LayoutInflater.java:645)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
at com.example.sportincenterapp.LoginActivity.onCreate(LoginActivity.kt:9)
at android.app.Activity.performCreate(Activity.java:6662)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 485935644 byte allocation with 3293900 free bytes and 379MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
at android.content.res.Resources.loadDrawable(Resources.java:854)
at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
at android.view.View.<init>(View.java:4175)
at android.view.ViewGroup.<init>(ViewGroup.java:578)
at android.view.ViewGroup.<init>(ViewGroup.java:574)
at android.view.ViewGroup.<init>(ViewGroup.java:570)
at androidx.constraintlayout.widget.ConstraintLayout.<init>(ConstraintLayout.java:567)
activity_login.xml包含一个简单的ConstraintLayout:
<?xml version="1.0" encoding="utf-8"?>
<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_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/login_background"
android:padding="20dp"
tools:context=".LoginActivity">
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<EditText
android:id="@+id/etUserName"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="50dp"
android:background="@drawable/edittext_login_background"
android:ems="10"
android:hint=" Email"
android:inputType="text"
android:textSize="17sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/logo" />
<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="30dp"
android:background="@drawable/edittext_login_background"
android:ems="10"
android:hint=" Password"
android:inputType="textPassword"
android:textSize="17sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etUserName" />
</androidx.constraintlayout.widget.ConstraintLayout>
build.gradle中的依赖项是最新的:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.android.support:design:28.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
最后是 LoginActivity.kt:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class LoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
}
}
我无法弄清楚问题是什么。
解决方案
也许你试试。要在低 api 设备上使用矢量可绘制 - 您需要将其添加到 build.gradle 以支持矢量可绘制。它应该可以解决您的问题
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
或者你的drawable太大了
推荐阅读
- git - 如何使用命令行在 Gitlab 中创建本地存储库和远程存储库?
- ruby - 来自孩子的标准输出的 Ruby 管道未关闭/如何检测空管道
- c# - 如何存储来自通用对象的验证器列表。C#
- angular - 将来自 API 的数据存储在变量 [Angular] 中
- ios - 如何通过单击 UITableView 的上一个单元格来解锁下一个单元格?
- javascript - TS2339:“字符串”类型上不存在属性“包含”
- latex - 使用 MikTex 编译时出现乳胶模棱两可的警告
- docker - Vagrant 用户即使使用 sudo 也没有 root 权限?
- android - 填充android布局xamarin
- php - Android - 使用来自 phpmysql 的 ID