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( ...
随机推荐
- Hand 3D Pose Estimation
https://cvarlab.icg.tugraz.at/projects/hand_detection/
- 读取XML文档结构并写入内容
1.在项目中新建XML文档结构.xsd文件,在其中添加相应的节点. 2.读取文档结构并写入内容 string initFileName = @"D:\Config.xml"; Da ...
- Linux下设置网卡静态ip
Linux下设置网卡静态ip 如果是服务器版,没有图形界面只用用命令行修改配置文件 如果是客户端版本,可以用图形界面 配置的前提是要在root用户下才能重启网卡服务 图形界面: system-conf ...
- 改变DataGrid某一行和单元格的颜色
前段时间做WPF项目,需要改变DataGrid某一行的颜色.高度,以及某个单元格的颜色.单元格字体的颜色,自然就必需取到datagrid的一行和一行的单元格,网上也是搜索了好久才找到,记录下来便于使用 ...
- ie无法下载 无法打开该internet站点.请求的站点不可用或无法找到.请稍后重试
PK找的: http://support.microsoft.com/kb/316431/ 症状 ... 如果服务器使用着安全套接字层 (SSL) 并且已将下面的两个 HTTP 标头或其中的一个添加到 ...
- SQL-Server2008 数据库发布订阅
参考博客园文章http://www.cnblogs.com/tyb1222/archive/2011/05/31/2064944.html 添加安全数据库 更改数据库名称 SQL语句 select @ ...
- gcc常用
gcc选项:-I指定头文件搜索路径.-D编译时定义宏-L链接时指定库文件搜索路径-l指定库文件名称-pipe使用管道,一个程序的输出作为输入直接送给另外一个程序, 而且还可以一直连续下去,不需要临时文 ...
- git merge
1. git 解决冲突 ***** <<<<<<< HEAD *** *** ======= **** **** ** >>>>> ...
- 关闭ehcache的更新检查UpdateChecker
ehcache默认开启自动更新检查,在你不能联网的环境下,会有异常出现. 在ehcache的配置文件中ehcache标签上加上属性updateCheck="false" 即可.
- 利用Xstream注解生成和解析xml
实体类: @XStreamAlias("person") public class PersonBean { @XStreamAlias("firstName&q ...