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

     

  • 相关阅读:
    套接口编程理论基础:正常启动
    套接口编程理论基础:服务器进程终止
    套接口编程理论基础:处理SIGCHLD信号
    分区表、分区索引
    IPC通信:Posix消息队列读,写
    IPC通信:Posix消息队列的创建,关闭,删除
    RBAC的资料
    关于RBAC的学习资料
    RSS你会用了吗?答曰:不会
    RBAC的资料
  • 原文地址:https://www.cnblogs.com/mengdd/p/2846640.html
Copyright © 2011-2022 走看看