在很多app中都涉及到中英文切換 繁體簡體切換,再此簡單的記錄一下
1,首先大家要清楚,默認情況下,Android會根據系統的語言地區設置,自動選擇對應的資源。也就是說會首先嚐試語言地區全匹配,如果沒有權匹配的
資源包,則會嘗試匹配語言,最後則會取默認的。比如如果Android系統的語言地區是中文簡體,則首先會嘗試從/values-zh-rCN中獲取資源,
如果沒有此文件夾或者文件夾中沒有響應的資源,則會嘗試/values-zh,都獲取不到的情況下即從/values中獲取。
(/values是必須存在的,否則不能通過編譯)
2,在命名values文件時是有要求的,下面是地區的命名連接:點擊打開鏈接 ,接下來就是在不同的values中魯相關語言的string代碼
3,書寫相關代碼,效果圖
public class MainActivity extends AppCompatActivity {
ImageButton btn_settings;
AlertDialog dialog;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//讀取SharedPreferences數據,初始化語言設置
setLanguage();
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
btn_settings = (ImageButton) findViewById(R.id.btn_settings);
//點擊設置按鈕進入語言設置
btn_settings.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//創建單選框
final AlertDialog.Builder builder = new
AlertDialog.Builder(MainActivity.this);
builder.setSingleChoiceItems(new String[]{"Auto", "簡體中文"},
getSharedPreferences("language", Context.MODE_PRIVATE).getInt("language",0),
new DialogInterface.OnClickListener() {
//點擊單選框某一項以後
public void onClick(DialogInterface dialogInterface, int i) {
//將選中項存入SharedPreferences,以便重啓應用後讀取設置
SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("language",i);
editor.apply();
setLanguage();
dialog.dismiss(); Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); /* 重新在新的任務棧開啓新應用
Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); */ } }); dialog = builder.create();
dialog.show(); } }); }/*
重要的代碼其實就是這裏
*/
private void setLanguage() {
//讀取SharedPreferences數據,默認選中第一項
SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);
int language = preferences.getInt("language", 0);
//根據讀取到的數據,進行設置
Resources resources = getResources();//獲得資源對象
DisplayMetrics displayMetrics = resources.getDisplayMetrics(); //獲取手機屏幕參數
Configuration configuration = resources.getConfiguration(); //Configuration類是專門用來描述手機設備上的配置信息。
這些配置信息包括用戶特定的配置項,也包括系統的動態設備配置。
switch (language){
case 0:
configuration.setLocale(Locale.getDefault());//設置爲手機系統默認的語言
break;
case 1:
configuration.setLocale( Locale.CHINESE); //設置爲英文,系統會檢測values_en的資源文件,如果沒有會執行values中的文件
break;
default:
break;
}
resources.updateConfiguration(configuration,displayMetrics);//更新修改後的資源配置
}