功能:

app用户根据自己的语言喜好,设置app语言。语言设置只针对本app,并在下次启动应用时保留前一次启动设置。

更新语言:

public static void changeAppLanguage(Resources resources, String lanAtr) { Configuration config = resources.getConfiguration(); DisplayMetrics dm = resources.getDisplayMetrics(); if (lanAtr.equals("ru_RU")) { config.locale = new Locale("ru", "RU"); } else if (lanAtr.equals("en_US")) { config.locale = Locale.ENGLISH; } else if (lanAtr.equals("pt")) { config.locale = new Locale("pt"); } else { config.locale = Locale.getDefault(); } resources.updateConfiguration(config, dm); }

sharePreferences存入设置语言:
Sharences sharedPreferences = getActivity().getSharedPrefeivity().getPackageName(), 0); sharedPreferences.edit().putString("language", lanAtr).commit();

语言更新后,对于之前出现且目前仍旧存活的activity,语言设置是不生效的。可以通过重启对应的activity,让语言及时生效。

private void restart() { Intent it = new Intent(getActivity(), MainActivity.class); //MainActivity是你想要重启的activity it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getActivity().startActivity(it); }

NOTE:

  • 一般,从用户体验角度讲,语言设置功能入口会放在App的前几层,如果入口太深,导致用户无法快速找到语言设置入口,并且如果要讲应用重启的话,用户行为操作记录会比较麻烦。
  • 重启对应Activity有几种方式
    • 如果用户进入语言设置需要太多的层级,或者在操作语言设置之前操作的其他行为,APP想保存的,那可以通过广播的方式(sendBroadcast()),语言改变时发送广播,所有activity接受到广播后(BroadcastReceiver),都进行重启操作;
    • 如果允许用户设置语言后,app回到主目录,这样就简单很多,直接调用上面的restart()方法即可。

重启singleTask activity:

如果你的启动activity是singleTask,向上面那样重启,语言还是不生效的。这种情况如何呢?可以通过了解、利用其生命周期来解决,在切回singleTask属性的activity时,activity会调用onNewIntent()方法。 重写该方法就可以。以下是一种解决方法,先finish自己,然后重启自己。

 @Overrideprotected void onNewIntent(Intent intent) { if (intent.getAction() == null) { finish(); Intent i = new Intent(this, MainActivity.class); startActivity(i); // overridePendingTransition(0, 0); } else { //其他逻辑 } }

结束语:

APP语言设置不复杂,主要是如何将语言设置及时生效,涉及activity重启,广播等。

转载于:https://www.cnblogs.com/Free-Thinker/p/5395303.html

Android学习–Android app 语言切换功能相关推荐

  1. android locale app内设置,Android app应用多语言切换功能实现

    本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下 1.添加多语言文件在不同的 value 文件夹下(例如 value .value-en.values-zh- ...

  2. Android实现app内的语言切换功能

    我在目前所在的公司负责一个app项目的维护,最近需要对这个项目进行国际化,适配10多个国家的语言,在实现国际化过程中,遇到了很多问题,最麻烦的就是翻译了,得一个个将翻译从excel复制到资源文件中,还 ...

  3. android的app语言无法切换,Android应用实现多语言切换

    关于Android应用实现多语言切换,有好几种办法,网上也搜到很多资料,这里有个简单有效的办法. 步骤如下: 在资源文件中新建一个文件夹values-en,在里面新建一个strings.xml,把默认 ...

  4. Android 8.0 App内切换语言不生效的问题记录

    国内大部分简单应该都只做了中文简体版,但是有部分项目需要面向国际化,甚至可能就是主打国外市场.因此我们有时候会遇到需要APP内做多语言切换的功能需求. 如何做多语言切换,网上资料还是很多的,本文也不是 ...

  5. Android学习之——APP番茄工作法——小结(1)

    2014-4-3补: 最近一直忘记回复:给位需要源码的,请到这里https://github.com/MrFuFuFu/TomatoTask  版本已经更新为1.0.1,且已在豌豆荚,应用宝,360手 ...

  6. android签到功能开发,Android应用开发之Android简单实现app每月签到功能

    本文将带你了解Android应用开发Android简单实现app每月签到功能,希望本文对大家学Android有所帮助. 本文实例为大家分享了Android实现app每月签到功能的具体代码,供大家参考, ...

  7. uni-app项目使用多语言切换功能

    1.下载安装(vue-i18n模块) npm install vue-i18n --save 2.如果项目中没有package.json文件,在根目录下新建package.json文件,并把以下代码加 ...

  8. html怎么实现多语言图片切换,JavaScript实现--中英语言切换功能

    最近弄的项目是面向国际的,所以老总说要有语言切换功能.第一感觉好像不难吧 网上查了下,感觉实现方法就2种: 一:2个版本的HTML.至于怎么切换,方法也很多. 不过这种方法,除了笨,我实在不知道用什么 ...

  9. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

最新文章

  1. 【深度学习】NetAug(网络增强)—Dropout的反面
  2. 邮件列表统计(网站推广)
  3. squirrel-foundation-demo
  4. 蚂蚁集团CEO胡晓明宣布辞任
  5. JS无刷新修改URL类似博客园翻页效果
  6. python lncrna_分析指令备份.sh
  7. esp8266作为wifi中继固件 无线信号延展
  8. vue 循环播放音乐列表 音量控制
  9. 稿费一般多少钱一千字_写网络小说能挣多少钱,稿费都是怎么算的?
  10. Linux网卡模块,裁剪Linux并实现网卡模块的安装(附有命令移植的脚本)
  11. int和integer
  12. arange()用于生成一维数组 reshape()将一维数组转换为多维数组
  13. swiper 滚回第一个数据_分散能源数据的区块链应用
  14. jy-13-LINUX——Linux
  15. R包circlize:柱状图用腻了?试试好看的弦状图
  16. 如何处理网站被植入恶意的一些代码导致的被机房拦截提示
  17. Django之爱鲜蜂项目开发 day06(二)
  18. 经济基础知识(初级)【4】
  19. 大航海时代2皮耶德攻略(SFC日版)
  20. 怎么精炼java代码_网页播放器开发(四)代码精炼提纯(示例代码)

热门文章

  1. 怎么把程序内部坐标转为屏幕坐标_全网最详细CNC加工中心程序代码大全!
  2. python学习-日志(logging的定义、参数、format、示例代码、创建logging对象、设置Handler)
  3. php+如何按文字分割文件夹,PHP实现的大文件切割与合并功能示例
  4. js中every用法_js数组中的方法 some, every, filter, find,map, reduce讲解及使用场景
  5. c语言网络在线人数统计,教你用ASP程序实现网站在线人数统计
  6. linux非守护线程一直不释放,Linux pthread 和 java thread 的是 / 非守护线程的行为
  7. ajax怎么在html与php中使用,如何使用ajax和php将数据从数据库表放到html表
  8. java encode in ansi_Java应用中的编码问题
  9. 35岁电子工程师的艰难抉择
  10. 基于FPGA的竞赛抢答器