Android 中英文切换,解决瘦身冲突

按照步骤来

一、AndroidManifest.xml文件(清单文件)

在每个要切换语言的Activity下面添加:

android:configChanges="locale"

<activity
            android:name="com.activity.RepairActivity"
            android:configChanges="locale"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan" >
        </activity>

 二、创建一个英文的strings.xml文件,目录名为values-en

values/strings.xml这个为默认语言,如果values-en目录下的strings.xml不存在,那英文就会选取默认语言。

<?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">language</string>
     <string name="action_settings">Settings</string>
    <string name="alert_data_init">updating..</string>
 </resources>

三、核心代码

/**
     * 刷新语言
     */
    public void updateActivity(String sta) {

        // 本地语言设置
        Locale myLocale = new Locale(sta);
        Resources res = getResources();// 获得res资源对象
        DisplayMetrics dm = res.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
        Configuration conf = res.getConfiguration();// 获得设置对象
        conf.locale = myLocale;// 简体中文
        res.updateConfiguration(conf, dm);
        // startActivity((new Intent(this, TabActivity.class)));
        // this.finish();
    }

String sta= getResources().getConfiguration().locale.getCountry()  //用于判断当前的语言

Locale.getDefault().getLanguage() //语言:取到的比如中文为zh,英文为en,日文为ko;

Locale.getDefault().toString()//具体的类别:比如繁体为zh_TW,简体为zh_CN。英文中有en_GB;日文有ko_KR。

扫描二维码关注公众号,回复: 10687264 查看本文章

把需要切换的Strings.xml对应的语言,传入到 updateActivity(String sta)  方法.....

也可以调用此类

// 切换成英文
                if (LanguageSettings.getInstance().getCurrentLanguage()
                        .equals("zh")) {
                    updateActivity("en");
                    LanguageSettings.getInstance().switchCurrentLanguage();
                } else {
                    // 切换成中文
                    updateActivity("zh");
                    LanguageSettings.getInstance().switchCurrentLanguage();
                }

 LanguageSettings.getInstance().getCurrentLanguage() 给变量动态赋值的标识列,用于判断!(采用单例模式)

我自己写的是这样的:

private void checkLanguage() {
        // 界面出来前判断好
        String aString = SystemArgs.LANGUAGE;
        System.out.print(aString);
        System.out.print(SystemArgs.LANGUAGE);
        String language = pref.getString(SystemArgs.LANGUAGE, "Chinese");
        System.out.print(language);
        Log.i("a", language);
        try {
            if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))
                chooseLanguage(Locale.CHINA);
            else if (language.equalsIgnoreCase("English")
                    || language.equals("英文"))
                chooseLanguage(Locale.US);
        } catch (Exception e) {
            // Log.i("error", "语言选择出错");
        }

    }

 

private void chooseLanguage(Locale locale) {
        Resources resources = getResources();// 获得res资源对象

        Configuration config = resources.getConfiguration();// 获得设置对象

        DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。

        config.locale = locale; // 语言

        resources.updateConfiguration(config, dm);
    }

对于图片的更改,需要自己在oncreate里判断语言,然后显示什么图片

四、其他的记录

对ListPreference的语言选项设置默认值

try {
            if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))
                CLanguage_ListPreference.setValueIndex(0);
            else if (language.equalsIgnoreCase("English")
                    || language.equals("英文"))
                CLanguage_ListPreference.setValueIndex(1);
        } catch (Exception e) {
            // Log.i("error", "语言选择出错");
        }

 

String language = defaultSharedPreferences.getString(
                SystemArgs.LANGUAGE, "中文");
        ImageView button = null;
        // 图片要自己去判断语言选择
        if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))

在做这个功能的时候,遇到一个冲突,在build.gradle中设置如下属性的时候,会出现切换不成功的时候 

因为APP瘦身会限制res只展示中文,所以引起冲突,切换不成功。

   defaultConfig {
        targetSdkVersion 28
        resConfig "zh"
    //此处很多属性都不影响,都省略了
  }

解决办法

删除

  resConfig "zh"

或者

resConfig "zh","en"

就能解决问题,如果还有什么问题,可以随时联系作者

发布了80 篇原创文章 · 获赞 93 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_40251830/article/details/83410294
今日推荐