Java代码:
package com.ayukyo;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity {
SharedPreferences sharedPreferences;
Editoreditor;
privatestatic final String SP_NAME = "test";
privatestatic final String SP_LOCALE = "locale";
privatestatic final String LOCALE_EN = "en";
privatestatic final String EXTRA_LOCALE = "locale";
//对比模式
privatestatic final int COMP_MODE_CREATE = 0;// create一个Activity时
//实时,发生在用户开启项目后,修改设备语言,动态改变Activity语言显示
// 跳转
privatestatic final int COMP_MODE_REALTIME = 1;
//重新进入
privatestatic final int COMP_MODE_RECREATE = 2;
Handlerhandler = new Handler();
StringlocaleFromSP;
LocalelocaleForReCreate;
Resourcesres;
Configuration cfg;
Timertimer;
Tasktask;
TextViewtv;
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean firstEnterFlag = true;
// 动态更新当前显示Activity的语言
Intent intent = getIntent();
if (intent != null) {
String localeString =intent.getStringExtra(EXTRA_LOCALE);
if (localeString != null) {
localeForReCreate = newLocale(localeString);
updateLocale(COMP_MODE_RECREATE);
firstEnterFlag = false;
}
}
if (firstEnterFlag) {
// 比较本地SP文件与系统语言
updateLocale(COMP_MODE_CREATE);
}
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
// 以下代码为显示
String resultsTextFormat =getResources().getString(
R.string.search_results_resultsTextFormat);
resultsTextFormat =String.format(resultsTextFormat, cfg.locale);
Log.e("styledResults", "" +resultsTextFormat);
tv.setText(resultsTextFormat);
// 以下代码,研究动态更新语言。这里,使用的是动态监控。
// 真实项目中,也可以考虑点击屏幕定义的“刷新语言”按钮来更新
timer = new Timer();
task = new Task();
timer.schedule(task, 1000, 5000);
if (savedInstanceState == null) {
savedInstanceState =getIntent().getBundleExtra("InstanceState");
if (savedInstanceState != null) {
Log.e(this.getClass().toString(),"savedInstanceState != null");
onRestoreInstanceState(savedInstanceState);
}
}
}
voidupdateLocale(int mode) {
sharedPreferences = getSharedPreferences(SP_NAME,0);
localeFromSP =sharedPreferences.getString(SP_LOCALE, null);
// 获取本地当前实时locale
res = this.getResources();
cfg = res.getConfiguration();
switch (mode) {
case COMP_MODE_REALTIME:
Log.e(this.getClass().toString(),"COMP_MODE_REALTIME");
if (localeFromSP != null&&!localeFromSP.equals(cfg.locale)) {
Bundle bundle = new Bundle();
onSaveInstanceState(bundle);
Intent intent = new Intent(this,this.getClass());
intent.putExtra(EXTRA_LOCALE,cfg.locale.toString());
intent.putExtra("InstanceState", bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intent);
finish();
}
break;
case COMP_MODE_CREATE:
Log.e(this.getClass().toString(),"COMP_MODE_CREATE");
if (localeFromSP == null) {
editor = sharedPreferences.edit();
// editor.putString(SP_LOCALE,locale.toString());
// 这里,我们假设把项目固定在英文环境下
editor.putString(SP_LOCALE, LOCALE_EN);
editor.commit();
}
localeFromSP =sharedPreferences.getString(SP_LOCALE, null);
// 注释以下三行代码,屏幕显示的是:当前设定的项目执行语言是 zh_CN!
// 不注释以下三行代码,屏幕显示的是:current lang is en!表明指定该Activity语言成功!!!
Locale locale = new Locale(localeFromSP);
cfg.locale = locale;
res.updateConfiguration(cfg, null);
break;
case COMP_MODE_RECREATE:
Log.e(this.getClass().toString(),"COMP_MODE_RECREATE");
cfg.locale = localeForReCreate;
res.updateConfiguration(cfg, null);
break;
default:
break;
}
}
privateclass Task extends TimerTask {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
Log.e(this.getClass().toString(), "Task");
updateLocale(COMP_MODE_REALTIME);
}
});
}
};
@Override
protectedvoid onDestroy() {
Log.e(this.getClass().toString(),"onDestroy");
if (task != null) {
task.cancel();
task = null;
}
if (timer != null) {
timer.cancel();
timer = null;
}
super.onDestroy();
}
}
-----------------------------------------------------------------------------
/res/layout/main.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
---------------------------------------------------------------------------------
/res/values/strings.xml
<?xml version="1.0"encoding="utf-8"?>
<resources>
<string name="hello">Hello World,MainActivity!</string>
<stringname="app_name">MyWeb</string>
<stringname="search_results_resultsTextFormat">当前设定的项目执行语言是%1$s!</string>
</resources>
--------------------------------------------------------------------------------
/res/values-en/strings.xml
<?xml version="1.0"encoding="utf-8"?>
<resources>
<string name="hello">Hello World,MainActivity!</string>
<stringname="app_name">MyWeb</string>
<stringname="search_results_resultsTextFormat">current langis %1$s!</string>
</resources>
---------------------------------------------------------------------------------
源码下载:http://vdisk.weibo.com/s/18eye
讲解:http://vdisk.weibo.com/s/16Dtn 第6,第7节
package com.ayukyo;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity {
}
-----------------------------------------------------------------------------
/res/layout/main.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
<TextView
</LinearLayout>
---------------------------------------------------------------------------------
/res/values/strings.xml
<?xml version="1.0"encoding="utf-8"?>
<resources>
</resources>
--------------------------------------------------------------------------------
/res/values-en/strings.xml
<?xml version="1.0"encoding="utf-8"?>
<resources>
</resources>
---------------------------------------------------------------------------------
源码下载:http://vdisk.weibo.com/s/18eye
讲解:http://vdisk.weibo.com/s/16Dtn