转载请标明出处: Android应用内设置多语言,可随系统语言改变而改变,也可设置app为固定语言不受系统语言影响_安卓app 默认都可以跟随系统语言吗-CSDN博客,本文出自:【陈少华的博客】
一、效果图
https://github.com/hnsycsxhzcsh/MultiLanguage/blob/master/myres/multilanguage.gif
二、实现原理
1、Application的onCreate中初始化,根据本地sp保存的多语言信息来确定app中显示哪种语言
2、在设置界面选择对应语言,然后把语言信息保存到sp中,重启应用
三、实现代码
1、首先要有一个多语言方法类MultiLanguageUtil
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.LocaleList;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import com.multilanguage.ConstantGlobal;
import java.util.Locale;
/**
* Created by HARRY on 2018/6/5 0005.
*/
public class MultiLanguageUtil {
public static Context attachBaseContext(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return createConfigurationResources(context);
} else {
setConfiguration(context);
return context;
}
}
/**
* 设置语言
*
* @param context
*/
public static void setConfiguration(Context context) {
Locale appLocale = getAppLocale(context);
//如果本地有语言信息,以本地为主,如果本地没有使用默认Locale
Locale locale = null;
String spLanguage = SpUtil.getString(context, ConstantGlobal.LOCALE_LANGUAGE);
String spCountry = SpUtil.getString(context, ConstantGlobal.LOCALE_COUNTRY);
if (!TextUtils.isEmpty(spLanguage) && !TextUtils.isEmpty(spCountry)) {
if (isSameLocal(appLocale, spLanguage, spCountry)) {
locale = appLocale;
} else {
l