【Android 多语言切换简单实例分享】
一.Android多语言切换
Android应用的开发不可能仅仅针对某一个国家或者区域使用,各国间语言文化各不同样,因此一个优秀的APP必须支持多种语言,为了实现这个特性,Android给出了一个解决方案,在res文件夹下通过values+语言编码来实现多国语言的支持(中间採用连字符号-连接)。比如:values-es代表英文,假设你决定了你的应用要支持多国语言。那么你就必须新建多种values-XXX的多语言支持文件,以下通过一个样例来看看主要的使用方式,先看下效果图:
1.project结构
注:主要看下res/values-en/strings.xml代表英文字符串资源文件,res/values-zh/strings.xml代表中文.
- res/values-en/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">SwitchLanguage</string>
<string name="hello_world">This is an instance of Android</string>
<string name="switch_language">Switch Language</string>
<string name="english">English</string>
<string name="chinese">Chinese</string>
<string name="jump">Jump to Next Activity</string>
<string name="change">The language of the page has changed, too.</string>
<string name="showtext">You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.</string>
</resources>
- res/values-zh/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">切换语言</string>
<string name="hello_world">这是一个Android实例</string>
<string name="switch_language">切换语言</string>
<string name="english">英语</string>
<string name="chinese">中文</string>
<string name="jump">跳转到还有一个页面</string>
<string name="change">这个页面语言也发生了变化</string>
<string name="showtext">你不能改变你的过去。但你能够让你的未来变得更美好。一旦时间浪费了,生命就浪费了。</string>
</resources>
2.代码实现
- BaseActivity.java
public class BaseActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 初始化PreferenceUtil
PreferenceUtil.init(this);
// 依据上次的语言设置,又一次设置语言
switchLanguage(PreferenceUtil.getString("language", "zh"));
}
/**
*
* <切换语言>
*
* @param language
* @see [类、类#方法、类#成员]
*/
protected void switchLanguage(String language)
{
// 设置应用语言类型
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
if (language.equals("en"))
{
config.locale = Locale.ENGLISH;
}
else
{
// 中文简体
config.locale = Locale.SIMPLIFIED_CHINESE;
}
resources.updateConfiguration(config, dm);
// 保存设置语言的类型
PreferenceUtil.commitString("language", language);
}
}
2、 MainActivity.java
public class MainActivity extends BaseActivity implements OnClickListener{
private Dialog mDialog;
private TextView textShow;
private Button button;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.text);
button = (Button) findViewById(R.id.btn);
button2 = (Button) findViewById(R.id.btn_2);
textShow = (TextView)findViewById(R.id.text_show);
textView.setText(R.string.hello_world);
button.setText(R.string.switch_language);
//监听切换语言按钮,弹出dialog选择语言
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mDialog == null) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_select_lanuage,null);
TextView english = (TextView) layout.findViewById(R.id.select_english);
TextView chinese = (TextView) layout.findViewById(R.id.select_chinese);
mDialog = new Dialog(MainActivity.this, R.style.Custom_Dialog_Theme);
mDialog.setCanceledOnTouchOutside(false);
english.setOnClickListener(MainActivity.this);
chinese.setOnClickListener(MainActivity.this);
mDialog.setContentView(layout);
}
mDialog.show();
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent it = new Intent(MainActivity.this, SecondActivity.class);
startActivity(it);
}
});
}
@Override
public void onClick(View v) {
mDialog.dismiss();
switch (v.getId()) {
case R.id.select_english:
//切换为英文
switchLanguage("en");
break;
case R.id.select_chinese:
//切换为中文
switchLanguage("zh");
break;
default:
break;
}
//更新语言后。destroy当前页面,又一次绘制
finish();
Intent it = new Intent(MainActivity.this, MainActivity.class);
startActivity(it);
}
}
- activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/hello_world" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:text="@string/switch_language" />
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:text="@string/jump" />
<TextView
android:id="@+id/text_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:textSize="18sp"
android:text="@string/showtext" />
</RelativeLayout>
3、 工具类PreferenceUtil.java
public class PreferenceUtil {
private static SharedPreferences mSharedPreferences = null;
private static Editor mEditor = null;
public static void init(Context context){
if (null == mSharedPreferences) {
mSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context) ;
}
}
public static void removeKey(String key){
mEditor = mSharedPreferences.edit();
mEditor.remove(key);
mEditor.commit();
}
public static void removeAll(){
mEditor = mSharedPreferences.edit();
mEditor.clear();
mEditor.commit();
}
public static void commitString(String key, String value){
mEditor = mSharedPreferences.edit();
mEditor.putString(key, value);
mEditor.commit();
}
public static String getString(String key, String faillValue){
return mSharedPreferences.getString(key, faillValue);
}
public static void commitInt(String key, int value){
mEditor = mSharedPreferences.edit();
mEditor.putInt(key, value);
mEditor.commit();
}
public static int getInt(String key, int failValue){
return mSharedPreferences.getInt(key, failValue);
}
public static void commitLong(String key, long value){
mEditor = mSharedPreferences.edit();
mEditor.putLong(key, value);
mEditor.commit();
}
public static long getLong(String key, long failValue) {
return mSharedPreferences.getLong(key, failValue);
}
public static void commitBoolean(String key, boolean value){
mEditor = mSharedPreferences.edit();
mEditor.putBoolean(key, value);
mEditor.commit();
}
public static Boolean getBoolean(String key, boolean failValue){
return mSharedPreferences.getBoolean(key, failValue);
}
}
4、 SecondActivity.java是要跳转的Activity,比較简单,仅仅有一个TextView用来显示文本,语言切换。文本语言也随之切换。
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
- activity_second.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/change" />
</RelativeLayout>
样例比較简单,关键代码都有凝视,有问题欢迎留言讨论,共同学习。
【Android 多语言切换简单实例分享】的更多相关文章
- .net实现webservice简单实例分享
原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用 ...
- Android学习–Android app 语言切换功能
功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...
- android 连接网络的简单实例
1.android有两种连接网络的类HttpURLConnect和HttpClient,但是HttpClient已逐渐被HttpURLConnect类代替所以就不提及. 2.实例 String add ...
- 【转】Android 语言切换过程分析
最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog. ...
- android 语言切换过程分析
android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...
- Android 应用内多语言切换
最近公司的 App 里需要用到多语言切换,简单来说,就是如果用户没有选择语言选项时,App 默认跟随系统语言,如果用户在 App 内进行了语言设置,那么就使用用户设置的语言.当然,你会发现,App 的 ...
- android Jni NDK开发环境搭建及其简单实例的编写
android Jni NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...
- Android app应用多语言切换功能实现
最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...
- Android经典项目开发之天气APP实例分享
原文:Android经典项目开发之天气APP实例分享 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mzc186/article/details/5 ...
随机推荐
- Python图像处理(8):边缘检測
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 此前已经得到了单个区域植株图像,接下来似乎应该尝试对这些区域进行分类识别.通过外形和叶脉进行植物种 ...
- Leagal or Not —— 拓扑排序(王道)
Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is so h ...
- java基础知识汇总4
三.集合(collection.set.list.map) 一.定义: 集合是Java里面最经常使用的,也是最重要的一部分.可以用好集合和理解好集合对于做Java程序的开发拥有无比的优点. 容器:用来 ...
- unity3D克隆50个游戏对象并输出Json格式的文本
http://wenku.baidu.com/link?url=tl8q_aj1n-U267XkKtSZISaw6jKJ1woh4CJkDUr1AwEzllSAv7P0r7cawXXSyDVXNf6m ...
- 应用程序池和应用程序域的区别(Difference between application pool and application domain)
来自StackOverFlow: http://stackoverflow.com/questions/8486335/difference-between-an-application-domai ...
- Android Exception 16(Error in ADT 23 Update)
http://stackoverflow.com/questions/24445367/error-in-adt-23-update http://stackoverflow.com/question ...
- iOSQuart2D绘图之UIImage简单使用
代码地址如下:http://www.demodashi.com/demo/11609.html 人生得意须尽欢,莫使金樽空对月. 天生我材必有用,千金散尽还复来. 前记 说到UIImage大家都不会感 ...
- pydensecrf安装报错1、UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 29: invalid start byte2、 LINK : fatal error LNK1158: 无法运行“rc.exe” error: command 'D:\\software\\vs2015\\VC\\BIN
pydensecrf安装报错 1.UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 29: invalid st ...
- 写入文件,创建xunlei批量任务
[php] <?php $arr = array(); $arr[] = 'http://s1.dwstatic.com/group1/M00/83/4A/834a040953745f52e8a ...
- 保存Hive查询结果的方法
很多时候,我们需要将Hive的查询(select)结果保存起来,方便进一步处理或查看.在Hive里面提供了不同的方式来保存查询结果,在这里做下总结: 一.保存结果到本地 方法1:调用hive标准输出, ...