布局别名

8.4  布局高级技术

本节将介绍一些与布局相关的技巧,通过这些技巧,可以更灵活地使用布局,并且也可以使布局更加有效率,占用更少的资源。

8.4.1  布局别名

布局别名本是资源本地化的一部分,不过由于本章的主题就是布局,所以在本节先提前向读者展示Android本地化的强大功能。

首先说明一下什么叫本地化资源目录。在res目录中的所有子目录都是资源目录,例如res/values、res/layout等。这些目录中存储的都是默认的资源。但在满足某些情况下系统需要使用另外的资源,例如,支持国际化的程序如果当前环境是中文,就要求所有的字符串资源从res/values-zh目录中的相应资源文件读取,如果当前环境是英文,就要从res/values-en目录中相应资源文件读取。其中values-zh、values-en就是本地化资源目录。所谓本地化目录也就是满足特定要求的资源文件存放的目录,例如,特殊的屏幕尺寸、不同的Android版本、不同的语言环境、不同的屏幕方向等。如果系统发现并没有满足当前特定要求的本地化资源目录,就会从默认的资源目录中寻找资源。例如,本地化资源目录只有res/values-zh和res/values-en,而当前的语言环境是法文,但并没有res/values-fr目录,所以系统会在默认的资源目录(res/values)寻找相应的字符串资源。

在了解了本地化资源目录后,就很容易理解布局别名了。所谓布局别名就是为不同布局文件指定同一个资源ID,以便在不同环境下系统可以使用同一个布局资源ID访问不同的布局资源。使用布局别名必须要注意布局文件的引用只能放到本地化资源目录中,而不能放到默认的资源目录(res/values)中。

下面是一个典型的布局别名的使用案例。

假设在res/layout目录中有两个布局文件:main_layout.xml和main_layout_en.xml,并且在主窗口中使用setContentView(R.layout.main_layout)将main_layout.xml与当前窗口关联。现在建立一个res/values-en目录(英文环境下使用该目录中的资源),然后在该目录下建立一个refs.xml文件(资源文件名可以任意命名),最后在refs.xml文件中输入如下的内容:

 
 
  1. <resources> 
  2.   <!--  为main_layout_en.xml文件指定一个名为main_layout的别名  --> 
  3.   <item name="main_layout" type="layout" >@layout/main_layout_en</item> 
  4. </resources> 

如果当前环境正好是英文,系统就会使用res/values-en目录中的资源,所以会为main_layout_en.xml文件指定一个别名。如果别名正好与某一个布局文件的资源ID相同,那么就相当于修改该资源ID的指针,也就是说如果在英文环境下,R.layout.main_layout引用的不再是main_layout.xml,而是main_layout_en.xml。

扩展学习:本地化的方式

如果目录中的文件太乱,需要整理,通常会采用两种方式。第1种方式最容易想到,也是最常用的,就是建立若干个目录,然后分门别类地将目录的文件放到这些刚建立的目录中。但还有另外一种方法,就是并不移动源目录中的文件,而是为每一个文件建立一个索引(可以将这些索引数据存储在数据库或其他文件中),然后对这些索引进行分组和管理。这么做的好处是并不需要移动文件,而且同一个文件还可以属于不同的类别。如果要采用第1种方式,就需要将文件所属的每个类别对应的目录都复制一份同样的文件,这样不仅浪费存储空间,也不易于管理。

本地化的方式与管理目录中文件的方式类似,可以将满足不同环境的资源文件放到相应的本地化资源目录中,也可以将资源文件统一放到一起,而在不同的本地化资源目录中添加别名引用,布局别名就是采用了后一种方式。在后面的部分会有一章专门讨论Android中的本地化技术,到时读者的所有关于本地化的疑问都将解开。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值