首页 > 解决方案 > 应用程序在特定设备上的 setContentView 上崩溃

问题描述

我正在开发横向模式的平板电脑应用程序,它目前仅支持大型平板电脑。为此,我创建了以下资源目录“layout-sw720dp-land”,并且在此文件夹中有 xml 布局。为了以横向模式开始我的活动,我还在清单中将我的活动的 screenOrientation 属性设置为横向。

我正在使用三星 Tab A(SM-P580) 进行测试,效果很好。但是,当客户尝试将我的应用程序加载到他的 Samsumg Tab S4(SM-T830) 上时,应用程序在 setContentView() 行上崩溃,并带有以下堆栈跟踪,

.DashboardActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f09001c
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3041)
       at android.app.ActivityThread.-wrap11(Unknown Source)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6960)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

据我所知,这两款平板电脑都属于相同大小的桶,因此这两款平板电脑都应该能够从“layout-sw720dp-land”获取布局文件而没有任何问题。但由于某种原因,Samsumg Tab S4 不允许这样做。是否有任何具体原因,或者我在这里遗漏了什么?任何帮助深表感谢。

标签: androidlayout

解决方案


找出导致问题的原因。在某些三星设备中,在设置->辅助功能->视觉->屏幕缩放和字体下,用户将能够选择屏幕缩放。

对我来说,问题在于屏幕缩放设置为最大。这实际上降低了设备分辨率,进而使屏幕看起来放大了。

结果,设备分辨率降低了,现在当我的应用程序加载时,它开始从我没有布局 xml 的 sw-600dp 文件夹中查找布局,因为我打算让应用程序仅在10英寸平板电脑。

因此解决方案是在 sw-600dp 中添加布局文件以避免应用程序崩溃。或者要求用户将屏幕缩放设置更改为最小,以便设备从 sw-720dp 存储桶中读取布局。


推荐阅读