对于仍在寻找此答案的人,由于从API 24弃用了configuration.locale,您现在可以使用:

configuration.setLocale(locale);

考虑到此方法的minSkdVersion是API 17.

完整示例代码:

@SuppressWarnings("deprecation")

private void setLocale(Locale locale){

SharedPrefUtils.saveLocale(locale); // optional - Helper method to save the selected language to SharedPreferences in case you might need to attach to activity context (you will need to code this)

Resources resources = getResources();

Configuration configuration = resources.getConfiguration();

DisplayMetrics displayMetrics = resources.getDisplayMetrics();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){

configuration.setLocale(locale);

} else{

configuration.locale=locale;

}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){

getApplicationContext().createConfigurationContext(configuration);

} else {

resources.updateConfiguration(configuration,displayMetrics);

}

}

不要忘记,如果使用正在运行的Activity更改语言环境,则需要重新启动它才能使更改生效.

编辑2018年5月11日

从@ CookieMonster的帖子开始,您可能无法在较高的API版本中保持区域设置更改.如果是这样,请将以下代码添加到Base Activity,以便在每次创建Activity时更新上下文区域设置:

@Override

protected void attachBaseContext(Context base) {

super.attachBaseContext(updateBaseContextLocale(base));

}

private Context updateBaseContextLocale(Context context) {

String language = SharedPrefUtils.getSavedLanguage(); // Helper method to get saved language from SharedPreferences

Locale locale = new Locale(language);

Locale.setDefault(locale);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

return updateResourcesLocale(context, locale);

}

return updateResourcesLocaleLegacy(context, locale);

}

@TargetApi(Build.VERSION_CODES.N)

private Context updateResourcesLocale(Context context, Locale locale) {

Configuration configuration = context.getResources().getConfiguration();

configuration.setLocale(locale);

return context.createConfigurationContext(configuration);

}

@SuppressWarnings("deprecation")

private Context updateResourcesLocaleLegacy(Context context, Locale locale) {

Resources resources = context.getResources();

Configuration configuration = resources.getConfiguration();

configuration.locale = locale;

resources.updateConfiguration(configuration, resources.getDisplayMetrics());

return context;

}

如果您使用此功能,请不要忘记在使用setLocate(语言环境)设置语言环境时将语言保存到SharedPreferences

android 自定义locale,android – 以编程方式设置Locale相关推荐

  1. android gravity参数,android - 如何以编程方式设置layout_gravity?

    android - 如何以编程方式设置layout_gravity? 我的问题很简单, 如何以编程方式设置我的按钮layout_gravity? 我在互联网上发现了这个,但它只是抛出了一个Nullpo ...

  2. 如何在Android按钮上以编程方式设置drawableLeft?

    本文翻译自:How to programmatically set drawableLeft on Android button? I'm dynamically creating buttons. ...

  3. android 程序颜色,android – 以编程方式设置scrim颜色

    我正在尝试以编程方式设置AppBarLayout的主要颜色. XML布局是 AndroidStudio的Scrolling示例: android:fitsSystemWindows="tru ...

  4. 关于 java:Android:如何以编程方式设置 MediaPlayer 音量?

    Android : How to set MediaPlayer volume programmatically? 如何以编程方式设置媒体播放器音量.我将它用于警报通知.任何帮助都非常感谢,并提前感谢 ...

  5. 在Android中,如何以编程方式在dp中设置边距?

    本文翻译自:In Android, how do I set margins in dp programmatically? In this , this and this thread I trie ...

  6. android自定义工具栏,Android工具栏中的自定义图标

    我正在使用支持工具栏中定义一个自定义图标,但唯一显示的图标是左箭头-我尝试以布局和编程方式设置它,但结果是一样的. 这是我的活动 public class MainActivity extends A ...

  7. android的padding属性,以编程方式获取android:padding属性

    从一个角度来看,如何以编程方式获取android:padding属性的值? 我目前正在使用: private static final String ANDROID_NAMESPACE = " ...

  8. android自定义虚线,Android自定义view的方式绘制虚线

    Android自定义view绘制虚线 最近项目中有个需求,通过自定义view的方式绘制虚线 别的不多说先看一眼效果 这个需求在我们的开发中应该是一个很常见的需求了吧,有人会说有更简单的实现方式,对,但 ...

  9. android自定义手势,Android编程实现自定义手势的方法详解

    本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何 ...

  10. android 自定义switchpreference,Android设置选项开发及自定义Preference样式

    一个完整的Android应用程序都应该提供选项(或者叫偏好设置等等)让用户对APP的表现形式能够进行设置,比如说是否加入用户体验计划,或者是否自动升级.定时提醒.开启自启动.后台运行等等.提供一个好的 ...

最新文章

  1. TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解。
  2. Python之字符编码(Day10)
  3. windows10 上运行 linux -- Cygwin
  4. Mysql 日志系统 redo log 和 binlog
  5. 8-7复习 stl常用算法
  6. 因为代言一款游戏 罗永浩和网友吵起来了
  7. druid 多数据源_Spring Boot + Mybatis 中 配置Druid多数据源并实现自由切换
  8. 火了!女教授把自己P成女娲,登上学术期刊封面
  9. cks子,间谍,局部Mo子和短管
  10. ICWAI和ICWA的完整形式是什么?
  11. 36Kr鬼畜推送,没事别惹程序员
  12. 分页设计 与 高级查询 的 结合设计
  13. javax.net.ssl.SSLException: closing inbound before receiving peer‘s close_notif---SpringCloud工作笔记111
  14. linux默认网关地址,linux shell 获取默认网关地址
  15. 2021年中国仪表阀市场趋势报告、技术动态创新及2027年市场预测
  16. 190327每日一句
  17. 【已解决】戴尔笔记本电脑的卡顿问题.
  18. 饱受诟病的白板面试,为什么沿用至今?
  19. 平行四边形的定义以及判定和性质
  20. 爬虫-爬取中国诗歌网中中国好诗栏目 - 统计词汇出现频数 - 副本

热门文章

  1. gephi mysql_用Gephi移动多个节点(Moving multiple nodes with Gephi)
  2. QClub:Ruby网站架构案例分享──财帮子FreeWheel(10.19 北京)
  3. DataMining——孤立点:落在高于Q1 或低于Q3 的1.5IQR的位置
  4. meta标签详解(name、http-equiv、scheme、charset、各浏览器常用meta标签、常见移动端meta标签)、viewport详解
  5. 香港资深艺人沈殿霞病逝 享年60岁(图)
  6. Java面试评语及录用建议_面试录用评语.doc
  7. 人才引进--我搭上了顺风车
  8. Excel文件加密的两种方式
  9. 马克思贡献了预备导数概念
  10. apache2添加网站配置