中英文切换怎么做?(国际化,简单好用)

在这里插入图片描述

1每一个Activity都继承BaseActivity,核心

changeLanguage(SPUtils.getLocalLanguage());
public class BaseActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        AppManager.getInstance().addActivity(this);
        changeLanguage(SPUtils.getLocalLanguage());
    }

    private void changeLanguage(String language) {
    
    
        Resources res = getResources();
        Configuration config = res.getConfiguration();
        DisplayMetrics dm = res.getDisplayMetrics();
        switch (language) {
    
    
            case "en":
                config.locale = Locale.ENGLISH;
                res.updateConfiguration(config, dm);
                break;
            case "ch":
                config.locale = Locale.CHINESE;
                res.updateConfiguration(config, dm);
                break;
        }
    }

    @Override
    protected void onDestroy() {
    
    
        AppManager.getInstance().removeActivity(this);
        super.onDestroy();
    }

    @Override
    protected void attachBaseContext(Context context) {
    
    
        /*
         方案二 不生效。
         */
//        LanguageContextWrapper.wrapper(context);
        super.attachBaseContext(context);
    }
}

2触发类
核心

 SPUtils.saveLocalLanguage("en");
package io.winkong.marinsmart.activity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import java.util.Locale;

import io.winkong.marinsmart.R;
import io.winkong.marinsmart.utils.AppManager;
import io.winkong.marinsmart.utils.LanguageContextWrapper;
import io.winkong.marinsmart.utils.SPUtils;

public class SystemLanguageActivity extends BaseActivity implements View.OnClickListener {
    
    
    private TextView backTv;
    private TextView titleBart;
    private TextView sureTv;
    private CheckBox zwCb;
    private CheckBox enCb;
    String currentLanguage = "zh";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_system_language);
        init();
    }


    private void init() {
    
    
        backTv = findViewById(R.id.back_tv);
        titleBart = findViewById(R.id.title_bart);
        sureTv = findViewById(R.id.sure_tv);
        zwCb = findViewById(R.id.zw_cb);
        enCb = findViewById(R.id.en_cb);
        titleBart.setText(getResources().getString(R.string.SystemLanguage));
        backTv.setOnClickListener(this);
        sureTv.setOnClickListener(this);
        zwCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
    
                if (isChecked) {
    
    
                    enCb.setChecked(false);
                }
            }
        });
        enCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
    
                if (isChecked) {
    
    
                    zwCb.setChecked(false);
                }
            }
        });
    }

    @Override
    public void onClick(View v) {
    
    
        switch (v.getId()) {
    
    
            case R.id.back_tv:
                finish();
                break;
            case R.id.sure_tv:
                if (enCb.isChecked()) {
    
    
                    SPUtils.saveLocalLanguage("en");
                } else if (zwCb.isChecked()) {
    
    
                    SPUtils.saveLocalLanguage("ch");
                }
                AppManager.getInstance().finishAllActivity();
                Intent intent = new Intent(SystemLanguageActivity.this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                break;
        }
    }

    public void switchLang() {
    
    
//        LanguageUtils.applyLanguage(Locale.ENGLISH, String.valueOf(true));
//        LanguageUtils.applyLanguage(Locale.ENGLISH, (Class<? extends Activity>) null);


        String currentLanguage = Locale.getDefault().getLanguage();
        Log.e("wy", "currentLanguage: " + currentLanguage);
        if (currentLanguage.equals("en")) {
    
    
            Locale.setDefault(Locale.CHINESE);
            Configuration configuration = getResources().getConfiguration();
            configuration.locale = Locale.CHINESE;
            getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
            recreate();
        } else {
    
    
            Locale.setDefault(Locale.ENGLISH);
            Configuration configuration = getResources().getConfiguration();
            configuration.locale = Locale.ENGLISH;
            getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
            recreate();
        }
        Log.e("wy", "Attach: " + getResources().getString(R.string.SystemLanguage));

    }

    public void switchLang(Context context) {
    
    
//        LanguageUtils.applyLanguage(Locale.ENGLISH, String.valueOf(true));
//        LanguageUtils.applyLanguage(Locale.ENGLISH, (Class<? extends Activity>) null);


        String currentLanguage = Locale.getDefault().getLanguage();
        Log.e("wy", "currentLanguage: " + currentLanguage);
        if (currentLanguage.equals("en")) {
    
    
            Locale.setDefault(Locale.CHINESE);
            Configuration configuration = context.getResources().getConfiguration();
            configuration.locale = Locale.CHINESE;
            context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());
            recreate();
        } else {
    
    
            Locale.setDefault(Locale.ENGLISH);
            Configuration configuration = context.getResources().getConfiguration();
            configuration.locale = Locale.ENGLISH;
            context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());
            recreate();
        }
        Log.e("wy", "Attach: " + context.getResources().getString(R.string.SystemLanguage));
    }
}

SPUtils
核心

configSharedPreferences.edit().putString(LOCAL_LANGUAGE, language).apply();
package io.winkong.marinsmart.utils;

import android.content.Context;
import android.content.SharedPreferences;

public class SPUtils {
    
    

    private static final String LOCAL_LANGUAGE = "language";//本地语言
    private static SPUtils instance;
    private static SharedPreferences configSharedPreferences;

    private SPUtils(Context context) {
    
    
        configSharedPreferences = context.getSharedPreferences("config", Context.MODE_PRIVATE);
    }

    public static SPUtils getInstance(Context context) {
    
    
        if (instance == null) {
    
    
            synchronized (SPUtils.class) {
    
    
                if (instance == null) {
    
    
                    instance = new SPUtils(context);
                }
            }
        }
        return instance;
    }

    public static String getLocalLanguage() {
    
    
        return configSharedPreferences.getString(LOCAL_LANGUAGE, "default");
    }

    public static void saveLocalLanguage(String language) {
    
    
        configSharedPreferences.edit().putString(LOCAL_LANGUAGE, language).apply();
    }

}

activity_system_language.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="io.winkong.marinsmart.activity.SystemLanguageActivity">

    <include layout="@layout/titlebar_include" />

    <LinearLayout
        android:background="@drawable/nickname_shape"
        android:orientation="vertical"
        android:layout_marginLeft="@dimen/dp_10"
        android:layout_marginRight="@dimen/dp_10"
        android:layout_marginTop="@dimen/dp_10"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:paddingLeft="26dp"
            android:paddingTop="18dp"
            android:layout_marginRight="23dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:textSize="16sp"
                android:text="@string/Chinese"
                android:layout_weight="1"
                android:textColor="@color/black_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <CheckBox
                android:id="@+id/zw_cb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </LinearLayout>

        <LinearLayout
            android:paddingLeft="26dp"
            android:paddingTop="18dp"
            android:layout_marginRight="23dp"
            android:layout_marginBottom="17dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/English"
                android:textColor="@color/black_title"
                android:textSize="16sp" />

            <CheckBox
                android:id="@+id/en_cb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </LinearLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/sure_tv"
        android:text="确定"
        android:layout_marginTop="24dp"
        android:textColor="@color/white"
        android:gravity="center"
        android:layout_gravity="center"
        android:background="@drawable/sure_background_shape"
        android:layout_width="131dp"
        android:layout_height="43dp" />

</LinearLayout>

猜你喜欢

转载自blog.csdn.net/xiyangyang8110/article/details/125085802