android - 应用程序在特定设备上的 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 不允许这样做。是否有任何具体原因,或者我在这里遗漏了什么?任何帮助深表感谢。
解决方案
找出导致问题的原因。在某些三星设备中,在设置->辅助功能->视觉->屏幕缩放和字体下,用户将能够选择屏幕缩放。
对我来说,问题在于屏幕缩放设置为最大。这实际上降低了设备分辨率,进而使屏幕看起来放大了。
结果,设备分辨率降低了,现在当我的应用程序加载时,它开始从我没有布局 xml 的 sw-600dp 文件夹中查找布局,因为我打算让应用程序仅在10英寸平板电脑。
因此解决方案是在 sw-600dp 中添加布局文件以避免应用程序崩溃。或者要求用户将屏幕缩放设置更改为最小,以便设备从 sw-720dp 存储桶中读取布局。
推荐阅读
- azure-devops - 如果我在同一台机器上运行多个 VSTS 构建代理,它们可以共享一个工作文件夹吗?
- java - 在 Java 中使用 JSOUP 库从 HTML 中读取内容
- wpf - CredentialManagement 1.0.2 - Nuget 包无法从 Windows 10 企业版中的 CredentialManager 获取凭据
- azure - 仅安排脚本在 Azure Pipeline 上定期运行
- javascript - 是否有使用 JavaScript 将方法 .collapse('show') 应用于 Bootstrap 4.6.x 中的节点列表的解决方案?
- python - 如何编辑字符串以在python中的特定位置添加变量?
- python - 显示错误结果python的字典
- c# - SignalR HubConnection StopAsync 抛出 ObjectDisposedException
- spring-boot - Jackson2HashMapper 的 toHash() 函数未序列化 BigDecimal
- javascript - $post 函数不会首先在 windows.onload 中运行