如何解决ViewFlipper 中的第一个 ImageView 导致崩溃
我有一个 ViewFlipper,其子视图完全在 xml 中布局和定义。
我遇到了一个难以重现的异常,我的应用程序在尝试膨胀 ViewFlipper 中的 ImageView 时崩溃。我试过了:
- 将此图像拆分为 4 个较小的图像,认为可能是资源大小问题。
- 针对不同步的资源 ID 清理和重建我的项目
- 使用 app:srcCompat 而不是 android:src
- 改用矢量可绘制
例外不限于设备类型或操作系统版本。我在测试中从未遇到过这个问题。看起来至少有 60% 的设备是 root 的,所以不确定人们是否在旁加载应用程序并弄乱 ID。
这是 ViewFlipper 中第一个视图的 xml。视图 2 和 3 是相同的布局,具有不同的字符串和图像源(非常简单)。我没有以编程方式进行任何 UI 设置。
<ViewFlipper
android:id="@+id/intro_flipper"
android:layout_width="0dp"
android:layout_height="0dp"
android:autoStart="true"
android:flipInterval="4000"
android:inAnimation="@anim/intro_slide_in_right"
android:outAnimation="@anim/intro_slide_out_left"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.65"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.2"
app:layout_constraintWidth_percent="0.95"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/viewflipper_child1"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/image1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:srcCompat="@drawable/intro1_image"
app:layout_constraintBottom_toTopOf="@id/viewflipper_guideline"
app:layout_constraintHeight_percent="0.7" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/viewflipper_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.7" />
<TextView
android:id="@+id/text1"
style="@style/OnboardingIntroTextStyle20sp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:text="@string/onboarding_intro1"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/viewflipper_guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>
...
</ViewFlipper>
崩溃堆栈跟踪:
Caused By: android.content.res.Resources$NotFoundException · Unable to find resource ID #0x7f080306
Resources.java:2070android.content.res.Resources.getResourceName
Resources.java:2441android.content.res.Resources.loadDrawableForCookie
Resources.java:2381android.content.res.Resources.loadDrawable
TypedArray.java:749android.content.res.TypedArray.getDrawable
XResources.java:1363android.content.res.XResources$XTypedArray.getDrawable
ImageView.java:146android.widget.ImageView.<init>
ImageView.java:135android.widget.ImageView.<init>
AppCompatImageView.java:74androidx.appcompat.widget.AppCompatImageView.<init>
AppCompatImageView.java:69androidx.appcompat.widget.AppCompatImageView.<init>
AppCompatViewInflater.java:199androidx.appcompat.app.AppCompatViewInflater.createImageView
AppCompatViewInflater.java:119androidx.appcompat.app.AppCompatViewInflater.createView
AppCompatDelegateImpl.java:1551androidx.appcompat.app.AppCompatDelegateImpl.createView
AppCompatDelegateImpl.java:1602androidx.appcompat.app.AppCompatDelegateImpl.onCreateView
LayoutInflater.java:180android.view.LayoutInflater$FactoryMerger.onCreateView
LayoutInflater.java:725android.view.LayoutInflater.createViewFromTag
LayoutInflater.java:806android.view.LayoutInflater.rInflate
LayoutInflater.java:809android.view.LayoutInflater.rInflate
LayoutInflater.java:809android.view.LayoutInflater.rInflate
LayoutInflater.java:504android.view.LayoutInflater.inflate
XposedBridge.java:-2de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative
XposedBridge.java:360de.robv.android.xposed.XposedBridge.handleHookedMethod
<Xposed>:-1android.view.LayoutInflater.inflate
LayoutInflater.java:414android.view.LayoutInflater.inflate
BaseDaggerFragment.kt:30com.trala.learn.violin.view.core.BaseDaggerFragment.onCreateView
注意:
- 这不是我的应用程序加载的第一个片段/活动,有一个简单的 Splash 活动,然后显示此活动/片段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。