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( ...
随机推荐
- Speed-BI 云平台视频观看频道
数据分析的关键,首先是要有数据进行透视分析.大家一般在使用EXCEL透视表进行数据分析时,会通过某个系统,导出类似视频中的数据底稿,然后在此基础上进行各种维度的变换与指标的改变.奥威思必得也有一个类似 ...
- Java Set操作
Set:无顺序,不包含重复的元素 HashSet:为快速查找设计的Set.存入HashSet的对象必须定义hashCode(). TreeSet: 保存次序的Set, 底层为树结构.使用它可以从Set ...
- IE、chrome、火狐中如何调试javascript脚本
1. IE中点击"F12",在弹出页面中调试javascript脚本 2. chrome中点击"F12",在弹出页面中调试javascript脚本 3. 火 ...
- javascript实例学习之八——无缝切换效果
无缝切换在网站的很多地方都有涉及,比如轮播图等. 基本思路: 1)将可视窗当前的元素复制,依次添加为ul中的子元素 2)改变ul整体的left取值(负的窗口值),动画缓动至想要的位置 3)将原视窗(已 ...
- ios webView 默认有缓存
ios webview清除缓存. ios默认webview是有缓存的,所以不改变URL的话,刷新不了网页数据,或者像我这样写 NSMutableURLRequest *request = [NSMut ...
- iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...
- The Struts dispatcher cannot be found. This is usually caused by using Strut
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the assoc ...
- SQL Server中使用正则表达式
SQL Server 2005及以上版本支持用CLR语言(C# .NET.VB.NET)编写过程.触发器和函数,因此使得正则匹配,数据提取能够在SQL中灵活运用,大大提高了SQL处理字符串,文本等内容 ...
- 自动档车的P档和N档的区别
P档时,驻车齿轮在变速箱内被部分锁死,所以此时平地上不踩刹车,车辆有一定的驻车效果.N档就是空档,发动机与传动轴在变速器位置彻底分离,没有连接.因此P档适合停车和驻车,就是到地方了,要熄火时挂P档,拉 ...
- Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)
控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ...