App多語言切換實現
阿新 • • 發佈:2018-11-27
先看下效果:
1、在res目錄下新建values-en目錄,在此目錄下新建string.xml檔案,內容如下:
<resources>
<string name="complete_info">complete information</string>
<string name="account_query">account query</string>
<string name="about_us">about us</string>
<string name ="system_setting">system setting</string>
<string name="log_out">log out</string>
<string name="change_language">change language</string>
</resources>
在預設的values檔案下string.xml檔案有對應的中文:
<resources>
<string name="complete_info">完善資訊</string >
<string name="account_query">賬戶查詢</string>
<string name="about_us">關於我們</string>
<string name="system_setting">系統設定</string>
<string name="log_out">退出登入</string>
<string name="change_language">切換語言</string>
</resources>
2、切換語言工具類:
public class ChangeLanguageHelper {
/**
* 說明:
* 1、context.getResources().getConfiguration()獲取的是本應用內部的語言和地區設定的Configuration
* 2、Resources.getSystem().getConfiguration()獲取的是系統的語言和地區設定的Configuration
*/
public static void changeAppLanguage(Context context, int language) {
Resources resources = context.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
Configuration config = resources.getConfiguration();
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
config.setLocale(getLocale(language));
} else {
config.locale = getLocale(language);
}
resources.updateConfiguration(config, dm);
SPUtil.getInstance().setAppLanguage(language);
}
private static Locale getLocale(int language){
//預設是系統的語言設定
Locale locale = Resources.getSystem().getConfiguration().locale;
if (language == Constant.SIMPLE_CHINESE) {//簡體中文
locale = Locale.SIMPLIFIED_CHINESE;
}
if (language == Constant.ENGLISH) {//英文
locale = Locale.ENGLISH;
}
return locale;
}
}
3、切換語言程式碼:
public class SelectLanguageActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_language);
setClick();
}
private void setClick() {
findViewById(R.id.auto_tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChangeLanguageHelper.changeAppLanguage(mContext, Constant.LANGUAGE_DEFAULT);
RestartApp();
}
});
findViewById(R.id.chinese_tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChangeLanguageHelper.changeAppLanguage(mContext, Constant.SIMPLE_CHINESE);
RestartApp();
}
});
findViewById(R.id.english_tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChangeLanguageHelper.changeAppLanguage(mContext, Constant.ENGLISH);
RestartApp();
}
});
}
private void RestartApp() {
Intent intent = new Intent(this, MainActivity.class);
//開始新的activity同時移除之前所有的activity
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
}
4、Activity的基類:
public abstract class BaseActivity extends AppCompatActivity{
protected Context mContext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
//保證app程序殺死後再次啟動時,之前的語言設定有效
ChangeLanguageHelper.changeAppLanguage(mContext, SPUtil.getInstance().getAppLanguage());
}
}
常量類:
public class Constant {
public static final int LANGUAGE_DEFAULT = 0; //自動
public static final int SIMPLE_CHINESE = 1; //中文
public static final int ENGLISH = 2; //英文
}