Android应用资源---提供资源(Providing Resources)(三)

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 11:15 我要评论(0)

使用资源提供最好的设备兼容性

为了让应用程序支持多种设备配置,始终给应用程序使用的每种资源类型都提供默认的资源是至关重要的。

例如,如果应用程序支持几种语言,就要始终包含没有语言和区域限定符的values/目录。如果把所有的字符串文件都放到由语言和区域限定符的目录中,那么当应用程序运行在不支持应用程序提供的语言集的设备上时,就会崩溃。但是,只要提供了默认的values/资源,应用程序就会正确的运行(即使用户不能理解应用程序提供的语言集,也比程序崩溃要好。)

同样,如果基于屏幕的方向,提供了不同的布局资源,那么也应该选择一个方向作为默认布局。例如,不要在layout-land/目录和layout-port目录中分别提供横向和纵向布局资源,而是要保留其中一个作为默认布局,如让layout/目录作为默认横行布局资源的存放地,而layout-port/目录保存纵向布局资源。

提供默认资源是重要的,不仅因为可以让应用程序在没有预计到的设备上运行,而且还因为某些在Android新版本中添加的配置限定符,旧版本不支持。如果使用了新的资源限定符,但是还要维护代码Android旧的版本的兼容性,那么当应用程序运行在旧的Android版本上时,如果提供默认资源,应用程序就会崩溃,因为使用了新的限定符命名的资源对应用程序不可用。例如,如果minSdkVersion被设置为4,并且限定了所有的可描画资源都是用night模式(night和notnight限定符在API级别8以后才被添加),那么API级别4的设备就不能访问这些可描画资源,应用程序就会因而崩溃。在这种情况中,可以让notnight模式的资源作为默认资源,因此应该在可描画资源的目录名去除notnight限定符,使得资源目录名如:drawable/、drawable-night/。

因此,为了提供最好的设备兼容性,首先应该始终提供默认资源,以便应用程序能够获得正确执行的资源,然后使用配置限定符给特殊的设备配置创建可选的资源。

这种规则对一种情况除外,如果应用的minSdkVersion是4或更大,在用屏幕分辨率限定符提供可选的描画资源时,就不需要默认的可描画资源。因为,即使没有默认的可描画资源,Android也能够在可选的屏幕分辨率之间找到最匹配的资源,并且按照需要缩放位图。但是,对于所有的设备类型,要获取最好的体验,应该为三种类型的分辨率提供可选的资源。如果minSdkVersion小于4(Android1.5或更低的版本),要注意屏幕的尺寸、分辨率、以及外观限定符是不被支持的,因此对于这些版本的平台需要执行另外的兼容性处理。

Android1.5提供屏幕资源的兼容性

Android1.5及更低版本,不支持下列配置限定符:

分辨率:

ldpi、mdpi、hdpi、nodpi

屏幕尺寸:

small、normal、large

屏幕外观:

long、notlong

这些配置限定符是在Android1.6中被引入的,因此Android1.5(API级别3及更低版本都不支持它们。如果使用这些配置限定符,并且没有提供相应的默认资源,那么Android1.5设备可能使用上述屏幕配置限定命名的任意一个资源目录中的资源,因为它忽略这些限定符,并使用它能够找到的第一个匹配的可描画资源。

例如,如果应用程序支持Android1.5,并且包含了每种分辨率类型的可描画资源(drawable-ldpi/、drawable-mdpi/、drawable-hdpi/),而且没有包含默认的可描画资源(drawable/),那么Android1.5就会使用任意一个可描画资源目录中的资源,这样就会导致用户界面的不理想。

因此在使用屏幕配置限定符时,要提供与Android1.5及以前版本的兼容性:

1. 把中等分辨率、普通的屏幕尺寸以及非长屏幕作为默认资源来提供。

因为所有的Android1.5设备都有中等的分辨率、普通的屏幕尺寸以及非长的屏幕,所以能够把这些类型的资源放到对应的默认资源目录中。例如,把所有的中等分辨率的可描画资源放到drawable/目录中(而不是drawable-mdpi/),把normal尺寸的资源放到对应的默认资源目录中,并且把notlong资源也放到对应的默认资源目录中。

2. 要确保SDK工具的版本时r6或更高的版本。

SDK工具需要修订版本6或更高,因为它包含一个新的打包工具,这个工具能够自动的把相应版本限定符中资源应用于任何Android1.0中不存在资源目录。例如,分辨率限定符是在Android1.6中(API级别4)被引入的,当打包工具遇到这样的目录时,它就会给目录名中添加“v4”,来确保旧版本不使用这些资源(只有API级别4和更高版本支持的限定符中的资源)。这样,通过把中等分辨率资源放到没有mdpi限定符的目录中,它们依然可以被Android1.5访问,并且支持这个分辨率限定符和有中等分辨率屏幕的任何设备也会使用这个默认资源,因为它们跟设备最匹配。

注意:Android的后续版本,如API级别8中引入的旧版本不支持的配置限定符。要提供最好的兼容性,就应该始终给每种类型的资源包含一组应用程序使用的默认资源。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...