应用本地化-让应用适配不同设备配置

应用本地化-让应用适配更多不同手机

  设备配置实际是一系列特征组合,用来描述设备当前状态。这些特征包括:屏幕方向、屏幕像素密度、屏幕尺寸键盘类型、底座模式以及语言等。通常,为匹配不同的设备配置,应用会提供不同的备选资源

image-20210922094032125


image-20210922094111038

  如上图,手机旋转前和旋转后使用不同的layout。右击res ->new Android Resource File。

image-20210922094552860

  其中available qualifiers选择orientation。

01 资源本地化

  应用语言本地化。右击res -> new Android Resource Directory ,Available qualifiers选择locale。

image-20210922100708382

image-20210922101609936

  在目录下,新建strings.xml.设置手机的语言为中文,应用会使用values-zh下的资源。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">我的应用 中文</string>
</resources>

image-20210922101509163

1 默认资源

  values是默认资源目录。不管手机语言是什么语言,当应用没有对应语言的资源时,都会使用默认资源。

  没有配置修饰符的资源就是Android的默认资源。如果无法找到匹配当前配置的资源,Android就会使用默认资源。默认资源至少能保证应用正常运行。

  Android默认资源使用规则并不适用于屏幕显示密度。项目的drawable目录通常按屏幕显示密度要求,带有-mdpi、-xxhdpi这样的修饰符。不过,Android决定使用哪一类drawable资源并不是简单地匹配设备的屏幕显示密度,也不是在没有匹配的资源时直接使用默认资源。

  最终的选择取决于对屏幕尺寸和显示密度的综合考虑。Android甚至可能会选择低于或高于当前设备屏幕密度的drawable资源,然后通过缩放去适配设备。无论如何,请记住一点:不要在res/drawable/目录下放置默认的drawable资源。

2 检查资源本地化完成情况

  右击strings.xml,选择Open Translations Editor菜单项即可。可以看到默认资源和中文资源。

image-20210922102745881

3 区域修饰符

  修饰资源目录也可以使用语言加区域修饰符,这样可以让资源使用更有针对性

  例如,西班牙语可以使用-es-rES修饰符,其中,r代表区域,ES是西班牙语的ISO 3166-1-alpha-2标准码。配置修饰符不区分大小写。但最好遵守Android命名约定:语言代码小写,区域代码大写,但前面加个小写的r

  -es-rES,看上去像两个不同的修饰符的合体,实际并非如此。这是因为,区域本身不能单独用作修饰符。资源匹配流程:

image-20210922105531032

例子:

image-20210922105746771

02 配置修饰符

  可带配置修饰符的设备配置特征,比如语言。

1移动国家码,通常附有移动网络码
2语言代码,通常附有区域代码
3布局方向
4最小宽度
5可用宽度
6可用高度
7屏幕尺寸
8屏幕纵横比
9圆形屏幕(API 23+)
10广色域
11高动态范围
12屏幕方向
13UI模式
14夜间模式
15屏幕显示密度(dpi)
16触摸屏类型
17键盘可用性
18首选输入法
19导航键可用性
20非文本导航方法
21API级别

  出现设备配置与好几个可选资源都匹配的情况。遇到这种状况,Android会基于上表的顺序确定修饰符的使用优先级。

2 多重配置修饰符

  可以在同一资源目录上使用多个配置修饰符。这需要各配置修饰符按照优先级别顺序排列。因此,values-zh-w600dp是一个有效的资源目录名,values-w600dp-zh目录名则无效。(在新建资源文件对话框中,工具会自动配置正确的目录名。)

3 寻找最佳资源

  首先,当前设备有以下四个版本的字符串备选资源用于crime_title_hint

  • values/strings.xml
  • values-zh/strings.xml
  • values-w600dp/strings.xml
  • values-zh-w600dp/strings.xml

  其次,在设备配置方面,有台Pixel 2,语言设为简体中文,处于横屏状态,屏宽600dp以上(可用宽度731dp,可用高度411dp)。

寻找步骤:

  1. 排除不兼容的目录

  要找到最匹配的资源,Android首先排除不兼容当前设备配置的资源目录。

  结合备选资源和设备配置来看,四个版本的备选资源均兼容设备的当前配置。(如果将设备竖起来,设备配置会改变。此时,values-w600dp/与values-zh-w600dp/资源目录不兼容当前配置,因此排除。)

  1. 按优先级表排除不兼容的目录

  筛选掉不兼容的资源目录后,自优先级最高的MCC(移动国家码)开始,Android逐项查看并按优先级表继续筛查不兼容目录(表17-1)。如果有任何以MCC为修饰符的资源目录,那么所有带MCC修饰符的都会被排除。如果仍有多个目录匹配,Android就继续按次高优先级筛选,如此反复,直至找到唯一满足兼容性的目录。

  本例中没有目录包含MCC修饰符,因此无法筛选掉任何目录。接着,Android查看到次高优先级的设备语言修饰符。values-zh和values-zh-w600dp目录包含语言修饰符。因此,不包含语言修饰符的values和values-w600dp可排除。(然而,本章前面说过,没有任何修饰符的values是默认资源,是最后的保障。现在,尽管因缺少语言修饰它被排除掉了,但如果其他values目录在某个低优先级修饰上没有资源可匹配,values依然会挺身而出成为最佳匹配资源。)

  由于仍有多个目录匹配,因此继续看优先级表,接下来是屏幕宽度。此时,Android会找到一个带屏宽修饰符的目录以及两个不带屏宽修饰符的目录,因此,values和values-zh目录也被排除。就这样,values-zh-w600dp成了唯一满足兼容需求的目录。

  因而,Android最终确定使用values-zh-w600dp目录下的资源。

03 测试备选资源

  在布局资源文件可以进行测试。

image-20210922112336006

04 确定设备屏幕尺寸

  不同的屏幕尺寸修饰符

修饰符格式描述
wXXXdp可用宽度:大于或等于XXXdp
hXXXdp可用高度:大于或等于XXXdp
swXXXdp最小宽度:宽或高(看哪个更小)大于或等于XXXdp

  假设要指定一个布局仅在屏幕至少300dp宽时使用。据此,你可以使用一个可用的宽度修饰符,把布局文件放在res/layout-w300dp(w代表宽度。同理,h代表高度)这样的目录中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值