Android:页面ui适配整理(3)

  1. 语言的适配(local的适配)
  • 应用中文本的适配

  • 用到的涉及文字的图片需要替换

  • 对整体UI进行适配修改(不同的语言Ui效果是不同的)

  1. 图片和UI适配没有什么难度,此处主要讨论文本字串的替换,文本字串的替换分为三个层次:
  • 修改系统的语言设置,ap的涉及文本的页面刷新

  • 上面基础上,添加应用内设置(控制语言的变化),此处设置可以修改系统的设置

  • 和2相似,只是应用内设置只会修改本ap,不会修改手机设置(这样更合理)

  1. 针对上面3种情况逐一分析解决办法:
  • 修改系统的语言设置,ap的涉及文本的页面刷新

    • ap文本随着系统的语言变化,在res文件夹下提供多个value-locale文件夹,文件夹内部string.xml提供具体locale对应语言的字串即可。

      • image.png
    • 此时需要注意,页面activity是否随着locale变化重走生命周期是可以配置的,即:

      • 4.2以前的系统:android:configChanges="locale"即可,系统locale发生改变,页面activity不在重走生命周期,而是走activity的onconfigchange()api。

      • 4.2及其以后的系统,在上面的基础上还需要加一个配置,即:android:configChanges="locale|layoutDirection"

      • 多数情况下不建议重走生命周期,即可以通过下面方式对页面进行刷新:

        • image.png
    • 是否重走生命周期按需求决定,由于重走生命周期性能也有影响。

  • ap内部设置语言同时修改系统(手机)的语言设置:

    • 系统把涉及到系统修改的api都隐藏了,即对外不提供调用,也是不让外在的应用修改系统的设置。

    • 可以使用api欺骗和反射两种方式获取到系统设置的api,在当前应用中调用修改系统的设置,实现方式可以参考下面的文章

    • 这个需求一般不会存在,还有就是隐藏的api具有不稳定性和系统的不兼容性所以不建议使用这两种方式

    • 还有这两种方法有可能在一些高版本的系统出现权限异常是因为4.2系统以后不允许外在应用修改系统设置,可以尝试设置application( android:sharedUserId="android.uid.system")让外在应用成为系统级应用,不一定管用。

  • ap内部设置语言但是不修改系统设置:

    • 两种实现

      • 在不同的Locale文件夹中提供不同语言的文本

      • 通过Configuration的Locale设置当前应用的Locale,具体的设置方法如下:

        • image.png
      • 上面只是设置了当前ap的资源Locale,并没有刷新当前的页面所以针对需求还需要补充完善即:

        • 未来加载的页面不需要处理

        • 针对当前已加载页面,需要手动去刷新页面(按钮,文本,内容等)

          • 通过广播,针对已加载的页面去判断是否修改Locale去过已修改去刷新

          • 在页面的onresume周期方法中去判断是否修改Locale去过已修改去刷新

          • 可以借助sharereference记录当前ap的locale和是否发生变化等还有就是建议提供父Activity和父Fragment去处理Locale的变化即:

            • image.png
    • 第二种实现相对麻烦繁琐:

      • 不需要再文件夹中处理Locale,在value中提供一个string.xml文件即可

      • 在文件中提供相应的语言String后缀即:比如test的一个文本,中文版本为:name_cn=“测试”,英文版本:name_eg = "test",其他依次类推

      • 借助sharereference记录Locale对应的语言标识符,在设置里面去进行相应的设置

      • 提供utils类对于本地文本,图片等资源字符串进行拼接

      • 这种方法同样存在无法刷新页面的问题,此时需要手动的去刷新即:

        • 通过广播,针对已加载的页面去判断是否修改Locale去过已修改去刷新

        • 在页面的onresume周期方法中去判断是否修改Locale去过已修改去刷新

  1. 语言环境和语言文件夹对比

    中文(中国):values-zh-rCN
    
    中文(台湾):values-zh-rTW
    
    中文(香港):values-zh-rHK
    
    英语(美国):values-en-rUS
    
    英语(英国):values-en-rGB     
    
    英文(澳大利亚):values-en-rAU
    
    英文(加拿大):values-en-rCA
    
    英文(爱尔兰):values-en-rIE
    
    英文(印度):values-en-rIN
    
    英文(新西兰):values-en-rNZ
    
    英文(新加坡):values-en-rSG
    
    英文(南非):values-en-rZA
    
    阿拉伯文(埃及):values-ar-rEG
    
    阿拉伯文(以色列):values-ar-rIL
    
    保加利亚文:  values-bg-rBG
    
    加泰罗尼亚文:values-ca-rES
    
    捷克文:values-cs-rCZ
    
    丹麦文:values-da-rDK
    
    德文(奥地利):values-de-rAT
    
    德文(瑞士):values-de-rCH
    
    德文(德国):values-de-rDE
    
    德文(列支敦士登):values-de-rLI
    
    希腊文:values-el-rGR
    
    西班牙文(西班牙):values-es-rES
    
    西班牙文(美国):values-es-rUS
    
    芬兰文(芬兰):values-fi-rFI
    
    法文(比利时):values-fr-rBE
    
    法文(加拿大):values-fr-rCA
    
    法文(瑞士):values-fr-rCH
    
    法文(法国):values-fr-rFR
    
    希伯来文:values-iw-rIL
    
    印地文:values-hi-rIN
    
    克罗里亚文:values-hr-rHR
    
    匈牙利文:values-hu-rHU
    
    印度尼西亚文:values-in-rID
    
    意大利文(瑞士):values-it-rCH
    
    意大利文(意大利):values-it-rIT
    
    日文:values-ja-rJP
    
    韩文:values-ko-rKR
    
    立陶宛文:valueslt-rLT
    
    拉脱维亚文:values-lv-rLV
    
    挪威博克马尔文:values-nb-rNO
    
    荷兰文(比利时):values-nl-BE
    
    荷兰文(荷兰):values-nl-rNL
    
    波兰文:values-pl-rPL
    
    葡萄牙文(巴西):values-pt-rBR
    
    葡萄牙文(葡萄牙):values-pt-rPT
    
    罗马尼亚文:values-ro-rRO
    
    俄文:values-ru-rRU
    
    斯洛伐克文:values-sk-rSK
    
    斯洛文尼亚文:values-sl-rSI
    
    塞尔维亚文:values-sr-rRS
    
    瑞典文:values-sv-rSE
    
    泰文:values-th-rTH
    
    塔加洛语:values-tl-rPH
    
    土耳其文:values--r-rTR
    
    乌克兰文:values-uk-rUA
    
    越南文:values-vi-rVN
    

应用内语言切换的三种方式

Android:configchanges属性详解

滴滴国际化方案配置

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容