zoukankan      html  css  js  c++  java
  • Android支持多种设备的方法及资源文件的使用

    Android支持多种设备的方法及资源文件的使用

      

      为不同的设备提供不同的资源,主要是利用特殊命名的资源文件夹来实现的。

      在运行时,Android系统根据当前的设备设置自动寻找合适的资源。

     

    默认资源(Default Resources

      编写应用的时候,需要创建一组默认的资源和一些可选针对特定配置的资源。

      默认资源是很重要的。

      这些情况下会使用默认资源:

      当应用处在特定配置下,而程序并没有提供这个配置下的相应资源,会使用默认资源;

      新的Android版本增加的资源文件修饰符,旧版本不支持该特性,会使用默认资源;

      即便处在特定配置下,而相应资源在该配置下替代资源中没有查找到时,也会使用默认资源。

      这里只有一个例外:如果应用程序的minSdkVersion设置为4或者是更高,就可以只提供带有屏幕密度限定符(ldpi、mdpi、hdpi、xhdpi、nodpi、tvdpi)的替代资源,不用设置默认的drawable资源,Andorid系统会自动寻找相应最好的匹配,并且对位图进行缩放。

      如果默认资源缺失,编译器并不会报错,但是当运行时找不到时,用户会看到错误信息和一个强制关闭的按钮。

      Important: Make sure that your application includes a full set of default resources.

      默认资源是一个完备的集合,程序中用到的每一个资源都应该定义了一个默认的资源。

      而一个本地化的资源可以是不完备的,只包含一个子集,当某些资源缺失时,会转而读取默认资源中的相应资源。

      测试默认资源时可以把装置设置到一个应用并不支持的设置状态下。

      比如测试字符串资源,应用程序支持英文和中文(提供了相应的资源),默认是英文。但是把装置语言设置成日文,此时应该显示默认资源(英文),如果默认资源缺失,就会出现强制关闭的按钮。

      res/目录下一般包含了所有的资源目录,其中默认资源目录如下:

    MyProject/

      res/

        animator/

        anim/

        color/

        drawable/

        layout/

                menu/

                raw/

        values/

         xml/

            

      其中values/中常用的文件命名规范:

      arrays.xml for resource arrays (typed arrays).

      colors.xml for color values

      dimens.xml for dimension values.

      strings.xml for string values.

      styles.xml for styles.

    替代资源(Alternative Resources)

      Android系统在运行时根据设备格局自动检测并选择资源载入,针对特定的格局提供替代资源时,在res/目录下增加相应的目录(资源目录不能嵌套)。

      该文件夹需要遵循一定的命名规则:<resources_name>-<config_qualifier>。

      resources_name为相应的默认资源目录名。

      config_qualifier为限定符,指定特定的格局或配置,多个限定符可用短划线隔开。多个限定符时要注意一定的连接顺序,否则资源会直接被忽略。

      在http://developer.android.com/guide/topics/resources/providing-resources.html

      中有一个表Table 2,多个限定符连接时必须要保持它们在表中的先后顺序。

      注意:命名是不区分大小写的。

      相应的资源存储在新的目录下,资源的名字必须和它们在默认目录下的对应资源一致。

    查询设备状态

      String locale = context.getResources().getConfiguration().locale.getDisplayName();

    别名资源(Alias Resources)

      有的时候两种特殊配置下可能想用同一种资源,这时候除了将资源复制两份放在不同的目录下之外,采用别名的机制处理更好。

      这种方式不是对所有资源都适用,这种特性只适用于图像、布局、字符串和其他简单值的资源(Drawable、Layout、Strings and other simple values)。

      具体方法见:

      http://developer.android.com/guide/topics/resources/providing-resources.html

      本文不再详述。

    发现最匹配资源的策略

    附上图一张:

     

     

    支持不同的语言

      http://developer.android.com/training/basics/supporting-devices/languages.html

      支持不同的语言主要是利用不同的目录下的字符文件,比如:

      res/values/strings.xml 包含默认语言的字符串。

      res/values-fr/strings.xml 包含法文的字符串。

      res/values-ja/strings.xml 包含日文的字符串。

      资源的名字对应好,那么根据不同的本地设置就会自动选择相应的语言。

      语言的限定符(Qualifier Values)有两种:

      第一种是语言编码:

      ISO 639-1:http://www.loc.gov/standards/iso639-2/php/code_list.php

      语言编码由两个字母构成。

      第二种是区域编码:

      ISO 3166-1-alpha-2:

      http://www.iso.org/iso/prods-services/iso3166ma/02iso-3166-code-lists/country_names_and_code_elements

      区域编码也由两个小写字母构成,但是前面要加上一个小写的r。

      区域编码是一个可选项,也可以只使用语言编码。

      例子:

      en

      fr

      en-rUS

      fr-rFR

      fr-Rca

      创建资源文件的时候可以在Eclipse左边导航窗口右键单击,选择new->Others->Android XML File。

      选择好对应项目和资源类型(Values)之后,输入文件名strings.xml,然后点击Next,就可以自己选择限定符和填写值了,完成之后目录就自动创建了。

      比较常用的目录:

      values-zh-rCN简体中文

      values-zh-rTW繁体中文

    支持不同的屏幕

      http://developer.android.com/training/basics/supporting-devices/screens.html

      http://developer.android.com/training/multiscreen/index.html

      Android利用尺寸(size)和密度(density)对屏幕进行分类。

      尺寸有四种:small, normal, large, xlarge。

      密度(分辨率)也有四种:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。

      另外屏幕的方向(screens orientation)也是需要考虑的一个方面:landscape为横向,portrait为纵向

    设置不同的布局

      根据不同的屏幕尺寸可以安排不同的布局。

      采用加上限定符的布局文件目录即可,如:

    MyProject/

        res/

            layout/              # default (portrait)

                main.xml

            layout-land/         # landscape

                main.xml

            layout-large/        # large (portrait)

                main.xml

            layout-large-land/   # large landscape

                main.xml

    使用不同的位图

      密度(density)是指单位英寸的像素值,也即屏幕的分辨率。根据分辨率的不同提供不同的界面元素图片。

      目录资源可以设置如下:

    MyProject/

        res/

            drawable-xhdpi/

                awesomeimage.png

            drawable-hdpi/

                awesomeimage.png

            drawable-mdpi/

                awesomeimage.png

            drawable-ldpi/

                awesomeimage.png

      用的时候@drawable/awesomeimage引用,系统会根据屏幕密度选择合适的图片版本。

      图像资源的生成,采用矢量图,利用如下比例:

      xhdpi: 2.0

      hdpi: 1.5

      mdpi: 1.0 (baseline)

      ldpi: 0.75

    参考资料

      支持不同的设备:

      http://developer.android.com/training/basics/supporting-devices/index.html

      本地化:

      http://developer.android.com/guide/topics/resources/localization.html

      提供资源:

      http://developer.android.com/guide/topics/resources/providing-resources.html

      资源类型:

      http://developer.android.com/guide/topics/resources/available-resources.html

      语言:

      http://developer.android.com/training/basics/supporting-devices/languages.html

      不同的屏幕:

      http://developer.android.com/training/basics/supporting-devices/screens.html

      http://developer.android.com/training/multiscreen/index.html

     

  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/mengdd/p/2846640.html
Copyright © 2011-2022 走看看