场景: 在设置中切换中英文,然后跳转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 在应用中切换语言的更多相关文章

  1. 〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)

    Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译 #!/usr/bin/env python # encoding: utf-8 ...

  2. Android 应用内切换语言

    extends :http://bbs.51cto.com/thread-1075165-1.html,http://www.cnblogs.com/loulijun/p/3164746.html 1 ...

  3. Android应用内部实现多语言,一键切换语言,国际化适配

    1.首先提供多语言对应的string值 如en对应英语, fr对应法语 两个文件中包含同样的key, 对应不同的语言的value 2.java代码相应用户切换语言动作 private static v ...

  4. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...

  5. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  6. 解决Android 7.0 App内切换语言不生效的问题

    Android7.0及以前版本,Configuration中的语言相当于是App的全局设置: public static void changeAppLanguage(Context context, ...

  7. 我的Android进阶之旅------>Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项

    今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.所以首先我得把系统的语言切换到波兰语,问题是哪个是波兰语呢? 我还真的不认识哪个列表项代表着 ...

  8. 016 Android 图片选择器(在选中和未选中的过程中,切换展示图片)

    1.目标效果 在选中和未选中的过程中,切换展示图片 2.实现方法 (1)在app--->res--->drawable 右击drawable文件夹右键,new ---->drawab ...

  9. 关于在静态html中实现语言切换的思路与实现

    在项目中只用到了三种语言:英文.中文简体.中文繁体.所以我首先想到了最笨的方法:1.直接将三种语言写在html中,显示当前设置的语言隐藏其它两种来实现.2.使用css伪元素的content:attr( ...

随机推荐

  1. rank 和 星星评级

    我们常常看到打分,如下图 这样的效果有几种方法 1.用:lt(index) /* $('dl').each(function(){ var ths = $(this); $(this).find('d ...

  2. iOS:后台定位并实时向服务器发送位置

    第一步:开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图: 第二步: ...

  3. npy in c

    https://jcastellssala.com/2014/02/01/npy-in-c/

  4. 浅谈 man 命令的日常使用

    Linux系统提供了相对比较丰富的帮助手册(man),man是manual的缩写,在日常linux系统管理中经常用到,今天就简单聊聊man.man 本身也提供自己的帮助手册,通过man就可以查看. ( ...

  5. java yum安装的环境变量设置

    如何(怎样)在CentOS 6.X 或 redhat 上使用安装JDK runtime environment (openjdk) ? CentOS 6.X 和 5.X 自带有OpenJDK runt ...

  6. 第七篇 SQL Server安全跨数据库所有权链接

    本篇文章是SQL Server安全系列的第七篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  7. SVN提交.a文件的方法

    选择菜单View-->Ignored Files,这样就会显示出ignored的文件,找到你要上传的.a文件,右键“Add”就可以了.

  8. 利用Xstream注解生成和解析xml

    实体类: @XStreamAlias("person") public class PersonBean {     @XStreamAlias("firstName&q ...

  9. Real-Time SQL Monitoring

    Real-Time SQL Monitoring可以在sql运行的时候监控其性能. 缺省情况下,单个sql执行花费的CPU或I/O时间超过5秒或sql并行执行的时候,Real-Time SQL Mon ...

  10. Singlton设计模式

    单例定义: 确保一个类只有一个实例,并提供全局访问点. 适用场景: 1.) 当系统中某个类必须仅有一个实例对象,同时访问该系统的所有访问者必须访问同一个实例对象时,且该对象实例自身占用资源又不大时. ...