当前位置: 首页 > news >正文

Android11 修改系统语言

1.定义一个view

<RelativeLayoutandroid:id="@+id/rlChooseLanguage"style="@style/SettingAboutItem"><TextViewstyle="@style/SettingAboutItemTextView"android:text="@string/choose_language" /><ImageView style="@style/SettingAboutArrowImageView" /></RelativeLayout>

2.java代码中给该view设置点击事件

private void showChooseLanguageDialog() {final String[] languages = {getString(R.string.language_chinese), getString(R.string.language_english)};AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());builder.setTitle(getString(R.string.choose_language)).setSingleChoiceItems(languages, getCurrentLanguageIndex(), (dialog, which) -> {final String selectedLanguage = languages[which].equals(getString(R.string.language_chinese)) ? "zh" : "en";dialog.dismiss();ToastUtil.show(getString(R.string.language_waitting));if (!selectedLanguage.equals(getCurrentLanguage())) {mHandler.postDelayed(new Runnable() {@Overridepublic void run() {changeAppLanguage(selectedLanguage);restartApp();}}, 500);}}).show();}
private String getCurrentLanguage() {Locale currentLocale = getResources().getConfiguration().locale;return currentLocale.getLanguage();}private int getCurrentLanguageIndex() {if (getCurrentLanguage().equals("zh")) {return 0;} else if (getCurrentLanguage().equals("en")) {return 1;}return 0;}

 

<string name="choose_language">选择语言</string><string name="language_chinese">中文</string><string name="language_english">英文</string><string name="language_waitting">修改配置中,请稍候...</string>

3.使用反射,调用修改语言功能

//设置语言,使用反射public void changeAppLanguage(String languageCode) {Locale locale = new Locale(languageCode);try {Class localPicker = Class.forName("com.android.internal.app.LocalePicker");Method updateLocale = localPicker.getDeclaredMethod("updateLocale",Locale.class);updateLocale.invoke(null, locale);} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException| IllegalAccessException e) {e.printStackTrace();}}

4.如果设备直接修改Locale信息无效,且使用反射也无效,可以直接跳转到系统设置页面,引导用户修改语言

Intent intent = new Intent(Settings.ACTION_LOCALE_SETTINGS);startActivity(intent);

5.重启app代码

private void restartApp() {Intent intent = MyApplication.getInstance().getPackageManager().getLaunchIntentForPackage(MyApplication.getInstance().getPackageName());intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);startActivity(intent);System.exit(0); // 强制退出当前进程}

http://www.lryc.cn/news/484098.html

相关文章:

  • vue3 查看word pdf excel文件
  • java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器
  • iSCSI 和FC的概述
  • 一文了解Android中的AudioFlinger
  • 超全面!一文带你快速入门HTML,CSS和JavaScript!
  • C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
  • 408笔记合集
  • 智慧医疗:纹理特征VS卷积特征
  • OPC学习笔记
  • 数据结构的时间复杂度和空间复杂度
  • HBase理论_背景特点及数据单元及与Hive对比
  • 生产模式打包
  • Vue的路由
  • Spring框架之策略模式 (Strategy Pattern)
  • 探索Google Earth Engine:利用MODIS数据和R语言进行2000-2021年遥感生态指数(RSEI)的时空趋势分析
  • 多商户中英双语电商系统设计与开发 PHP+mysql
  • 牵手App红娘专属1V1服务,打造贴心交友指导
  • 论文解析:边缘计算网络中资源共享的分布式协议(2区)
  • Android Osmdroid + 天地图 (一)
  • 浅谈:基于三维场景的视频融合方法
  • PostgreSQL序列:创建、管理与高效应用指南
  • 部署安装jdk8\redis\mysql8\nginx
  • 重要通知:Sedex 旧平台即将关闭
  • Windows配置NTP时间同步
  • 学Linux的第八天
  • 2024IJCAI | MetalISP: 仅用1M参数的RAW到RGB高效映射模型
  • aws-athena查询语句总结
  • 电信网关配置管理后台 upload_channels.php 任意文件上传漏洞复现
  • Vue全栈开发旅游网项目(11)-用户管理前端接口联调
  • react 中 useContext Hook 作用