如果设备的特性与任何可用资源都不匹配,会发生什么?

时间:2017-09-13 16:14:34

标签: java android android-resources

当您制作Android应用时,您可以将应用中的每个字符串存储在一个文件中,并且您可以制作多个文件,每个文件将针对特定语言或国家/地区,并且该应用将选择正确的文件自动。 对于多个密度,您可以使用 drawables 执行相同的操作。 但是当应用程序找不到所需的应用程序时会发生什么,例如,如果有4个可绘制的文件夹:

  

抽拉-MDPI

     

抽拉-HDPI

     

抽拉-xhdpi

     

抽拉-xxhdpi

并且每个主题包含相同的图片但具有不同的大小,并且开发人员使用了这张图片。 如果开发人员在低密度设备或具有额外额外密度的设备上尝试他的应用程序会发生什么,我的意思是如果您在具有与任何设备不匹配的设备中启动应用程序将会发生什么特定的资源限定符?

1 个答案:

答案 0 :(得分:1)

对于因密度而异的drawables的狭窄情况,Android将选择最接近的密度并缩放图像。

更一般地说,这就是为什么对于drawables / mipmaps以外的东西,你总是在基本资源目录中拥有一组主资源(例如res/layout/res/menu/res/values/ ),并在具有资源集限定符的目录中根据需要覆盖它们(例如,res/layout-sw640dp/)。

因为,更一般地说,如果您在请求资源且无法匹配的情况下结束,则会得到ResourceNotFoundException

例如,假设您希望在应用中支持两种语言:英语和西班牙语(目前您愿意忽略区域差异,例如英国英语和美国英语)。然后,您有两组字符串资源:英语和西班牙语。如果您将一个集合放在res/values/中,而另一个集合放在特定于语言的目录中(例如,res/values-es/用于西班牙语),那么应用程序将在其区域设置设置为其他内容的设备上结束(例如,法语),用户可以获得res/values/中的任何内容。另一方面,如果您决定将两种语言都放在特定于语言的目录中(例如res/values-es/res/values-en/),则法语用户的应用程序会崩溃ResourceNotFoundException当应用程序尝试加载字符串资源时,找不到符合设置的设备。