1:在res资源文件夹下创建values-en文件夹 原来的values作为默认语言 默认为中文 在values-en里面创建strings.xml

2:在values values-xx下面的strings.xml实现翻译

value
 

3:在需要的地方里面通过key来获取value进行显示
4:创建语言util

package co.nano.nanowallet.util;        import android.content.Context;        import android.content.res.Configuration;        import android.content.res.Resources;        import android.os.Build;        import android.os.LocaleList;        import android.util.DisplayMetrics;        import android.util.Log;        import java.util.Locale;        import co.nano.nanowallet.R;public class LocalManageUtil {    private static final String TAG = "LocalManageUtil";    /**     * 获取系统的locale     *     * @return Locale对象     */    public static Locale getSystemLocale(Context context) {        return SPUtil.getInstance(context).getSystemCurrentLocal();    }    public static String getSelectLanguage(Context context) {        switch (SPUtil.getInstance(context).getSelectLanguage()) {            case 0:                return context.getString(R.string.language_en);            default:                return context.getString(R.string.language_cn);        }    }    /**     * 获取选择的语言设置     *     * @param context     * @return     */    public static Locale getSetLanguageLocale(Context context) {        switch (SPUtil.getInstance(context).getSelectLanguage()) {            case 0:                return getSystemLocale(context);            case 1:                return Locale.CHINA;            case 2:                return Locale.TAIWAN;            case 3:            default:                return Locale.ENGLISH;        }    }    public static void saveSelectLanguage(Context context, int select) {        SPUtil.getInstance(context).saveLanguage(select);        setApplicationLanguage(context);    }    public static Context setLocal(Context context) {        return updateResources(context, getSetLanguageLocale(context));    }    private static Context updateResources(Context context, Locale locale) {        Locale.setDefault(locale);        Resources res = context.getResources();        Configuration config = new Configuration(res.getConfiguration());        if (Build.VERSION.SDK_INT >= 17) {            config.setLocale(locale);            context = context.createConfigurationContext(config);        } else {            config.locale = locale;            res.updateConfiguration(config, res.getDisplayMetrics());        }        return context;    }    /**     * 设置语言类型     */    public static void setApplicationLanguage(Context context) {        Resources resources = context.getApplicationContext().getResources();        DisplayMetrics dm = resources.getDisplayMetrics();        Configuration config = resources.getConfiguration();        Locale locale = getSetLanguageLocale(context);        config.locale = locale;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {            LocaleList localeList = new LocaleList(locale);            LocaleList.setDefault(localeList);            config.setLocales(localeList);            context.getApplicationContext().createConfigurationContext(config);            Locale.setDefault(locale);        }        resources.updateConfiguration(config, dm);    }    public static void saveSystemCurrentLanguage(Context context) {        Locale locale;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {            locale = LocaleList.getDefault().get(0);        } else {            locale = Locale.getDefault();        }        Log.d(TAG, locale.getLanguage());        SPUtil.getInstance(context).setSystemCurrentLocal(locale);    }    public static void onConfigurationChanged(Context context){        saveSystemCurrentLanguage(context);        setLocal(context);        setApplicationLanguage(context);    }}

5:在application中的oncreate方法设置首次进入app的语言

LocalManageUtil.setApplicationLanguage(this);

实现两个方法

@Overrideprotected void attachBaseContext(Context base) {    LocalManageUtil.saveSystemCurrentLanguage(base);    super.attachBaseContext(LocalManageUtil.setLocal(base));}@Overridepublic void onConfigurationChanged(Configuration newConfig) {    super.onConfigurationChanged(newConfig);    //保存系统选择语言    LocalManageUtil.onConfigurationChanged(getApplicationContext());}

6:在baseactivity中实现

@Overrideprotected void attachBaseContext(Context newBase) {    super.attachBaseContext(LocalManageUtil.setLocal(newBase));}

7:在设置里面增加两个按钮 点击调用

public static void selectLanguage(int select,Context context) {    LocalManageUtil.saveSelectLanguage(context, select);    MainActivity.reStart(context);}

8:实现reStart应用来展示效果

public static void reStart(Context context) {    Intent intent = new Intent(context, MainActivity.class);    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);    context.startActivity(intent);}

更多相关文章

  1. Android卡片组件(CardView)
  2. android通过线程实现逐行显示信息
  3. Android实现短信验证码获取自动填写功能(详细版)
  4. Android(安卓)自定义View之View的绘制
  5. Android实例练习-可爱的小闹钟
  6. Linux设置qt-android开发环境
  7. Android39_Clock和TimePicker
  8. Android(安卓)通过高德地图获取地址的经纬度
  9. Android(安卓)Material Design之CardView(卡片式布局)

随机推荐

  1. ConstraintLayout 实现水平方向 权重 效
  2. 关于android的nfc问题
  3. 深入理解Android消息处理系统——Looper
  4. Android实习笔记----调用拨号器,邮件短信
  5. android O 对后台服务的限制
  6. Android(安卓)播放视频的方法+播放测试地
  7. Some Standard Activity Actions
  8. Android十日学习路线
  9. xmlns:android="http://schemas.android.
  10. Use logCat in android native