android 在应用中切换语言
场景: 在设置中切换中英文,然后跳转MainActivity....
步骤:
1.在MyApplication 中初始化语言
public class MyApplication extends Application {
private static MyApplication instance;
public static MyApplication getInstance() {
return instance;
}
public static MyApplication getContext() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
String savedLanguage = LanguageUtil.getSavedLanguage();
if (TextUtils.isEmpty(savedLanguage)) {
LanguageUtil.setLanguage("cn"); // 设置默认语言为 "cn"
} else {
LanguageUtil.setLanguage(savedLanguage);
}
}
}
2.在 MainActivity 中 @Override onNewIntent()这个方法 , 如果不重写,当launch mode 为single task 时不会刷新
@Override
protected void onNewIntent(Intent intent) {
if (intent.getAction() == "language changed") {
finish();
startActivity(new Intent(this, MainActivity.class));
} else {
super.onNewIntent(intent);
}
}
3.设置界面代码和布局文件
public class SettingActivity extends BaseActivity {
RadioGroup rgLanguage;
RadioButton rbCn;
RadioButton rbEn;
private int checkedRadioButtonId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting_language);
rgLanguage = super.$(this, R.id.rgLanguage);
rbCn = super.$(this, R.id.rbCn);
rbEn = super.$(this, R.id.rbEn);
if ("en".equals(LanguageUtil.getSavedLanguage())) {
rbEn.setChecked(true);
} else {
rbCn.setChecked(true);
}
checkedRadioButtonId = rgLanguage.getCheckedRadioButtonId();
super.$(this, R.id.btnConfirm).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkedRadioButtonId != rgLanguage.getCheckedRadioButtonId()) {
if (rbCn.isChecked()) {
LanguageUtil.setLanguage("cn");
} else if (rbEn.isChecked()) {
LanguageUtil.setLanguage("en");
}
finish();
Intent intent = new Intent(MyApplication.getContext(), FirstActivity.class);
intent.setAction("language changed");
startActivity(intent);
} else {
finish();
}
}
});
}
}
////////////////////////////////////////////////////////////////////
public class BaseActivity extends Activity {
public <T extends View> T $(Activity activity, int resId) {
return (T) activity.findViewById(resId);
}
}
设置界面 activity_setting_language.xml 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/switcher"/> <RadioGroup
android:id="@+id/rgLanguage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <RadioButton
android:id="@+id/rbCn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="中文"/> <RadioButton
android:id="@+id/rbEn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="English"/>
</RadioGroup> <Button
android:id="@+id/btnConfirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/confirm"/> </LinearLayout>
4.LanguageUtil 代码
public class LanguageUtil {
/**
* 设置语言
*
* @param language "cn" = 中文, "en" = 英文
*/
public static void setLanguage(String language) {
Resources resources = MyApplication.getContext().getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = new Locale(language);
resources.updateConfiguration(configuration, null);
saveLanguage(language);
}
public static void saveLanguage(String language) {
MyApplication.getContext().getSharedPreferences("settings", Context.MODE_PRIVATE)
.edit().putString("language", language).commit();
}
public static String getSavedLanguage() {
return MyApplication.getContext().getSharedPreferences("settings", Context.MODE_PRIVATE)
.getString("language", "");
}
}
5.AndroidManifest.xml 中添加权限,以及MyApplication的注册
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
android 在应用中切换语言的更多相关文章
- 〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)
Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译 #!/usr/bin/env python # encoding: utf-8 ...
- Android 应用内切换语言
extends :http://bbs.51cto.com/thread-1075165-1.html,http://www.cnblogs.com/loulijun/p/3164746.html 1 ...
- Android应用内部实现多语言,一键切换语言,国际化适配
1.首先提供多语言对应的string值 如en对应英语, fr对应法语 两个文件中包含同样的key, 对应不同的语言的value 2.java代码相应用户切换语言动作 private static v ...
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- 解决Android 7.0 App内切换语言不生效的问题
Android7.0及以前版本,Configuration中的语言相当于是App的全局设置: public static void changeAppLanguage(Context context, ...
- 我的Android进阶之旅------>Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项
今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.所以首先我得把系统的语言切换到波兰语,问题是哪个是波兰语呢? 我还真的不认识哪个列表项代表着 ...
- 016 Android 图片选择器(在选中和未选中的过程中,切换展示图片)
1.目标效果 在选中和未选中的过程中,切换展示图片 2.实现方法 (1)在app--->res--->drawable 右击drawable文件夹右键,new ---->drawab ...
- 关于在静态html中实现语言切换的思路与实现
在项目中只用到了三种语言:英文.中文简体.中文繁体.所以我首先想到了最笨的方法:1.直接将三种语言写在html中,显示当前设置的语言隐藏其它两种来实现.2.使用css伪元素的content:attr( ...
随机推荐
- 一行两端对齐justify-content
一.之前不了解css3的属性,更没听过flex布局 在处理表单前面的文字,两端对齐,按照我之前的前端人员,加空格处理,但是在不浏览器解析空格的宽是不一样的 上图就用空格,在不同浏览器显示的效果,有时候 ...
- iOS:详细的正则表达式
1.简介: 在项目中,正则的使用是很普遍的,例如登录账号和密码(手机号.邮箱等).用到的方法就是谓词对象过滤:NSPredicate. 2.什么是正则表达式: 正则表达式,又称正规表示法,是对字符串操 ...
- SQL Update实现使用一个表的数据更新另一张表
表结构 功能 SQL Serevr Access 表结构
- Radius session
1,EAP 中继 client start, NAS require identity, client sent username, NAS sent username to sever, serve ...
- oracle和sql server的区别(1)
A.instance和database 1.从oracle的角度来说,每个instance对应一个database.有时候多个instance对应一个database(比如rac环境).有自己的Sys ...
- PostgreSQL数据导出导入COPY
[postgres@DELL-R720 bin]$ ./psql -p 6432psql (9.4.5)Type "help" for help. postgres=# postg ...
- Leetcode: Number of Islands II && Summary of Union Find
A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...
- SLF4J环境变量配置
因部分程序需要,需要把SLF4J加入到环境变量中. 添加位置:CLASSPATH 添加信息如下: C:\slf4j-1.7.19\slf4j-nop-1.7.19.jar;
- 传递闭包(Floyd+bellman-Fold POJ1932)
传递闭包 在一个有向(无向)连通图中,如果节点i与k联通,k与j联通,则i和j联通,传递闭包就是把所有传递性的节点求出来,之后就知道了任意两个节点的连通性,只需枚举节点的联通情况即可,无需考虑最短路径 ...
- 大数据Spark超经典视频链接全集
论坛贴吧等信息发布参考模板 Scala.Spark史上最全面.最详细.最彻底的一整套视频全集(特别是机器学习.Spark Core解密.Spark性能优化.Spark面试宝典.Spark项目案例等). ...