多语言切换

来源:互联网 发布:淘宝一颗钻多少钱 编辑:程序博客网 时间:2024/06/06 01:17

android的多语言切换

项目中应用到了多语言切换,巩固一下。贴上代码大家一起学习。废话不多说直接上代码...

1、添加多语言
在res >> values >> 下默认有个strings,需要多种语言就来创建几个strings,values右键 new 一个 values  res  file >> File Name:就是strings  >>Directory name:比如添加英文就是 values-en。其它的大家去搜,本人就不一一列举。

2、布局文件
mainActivity:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:background="#ffffff">    <TextView        android:id="@+id/text"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="@string/text"        android:gravity="center"        android:textSize="20sp"        />    <TextView        android:id="@+id/change_language"        android:layout_width="match_parent"        android:layout_height="50dp"        android:text="@string/change"        android:gravity="center"        /></LinearLayout>
dialog:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="250dp"    android:layout_height="260dp"    android:background="@mipmap/login_migration_cut"    android:gravity="center">    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="20dp"        android:layout_marginRight="20dp"        android:gravity="center"        android:orientation="vertical">        <Button            android:id="@+id/simple"            android:layout_gravity="center"            style="@style/language_btn"            android:text="@string/language_simple" />        <Button            android:id="@+id/fanti"            style="@style/language_btn"            android:layout_gravity="center"            android:layout_marginTop="10dp"            android:text="@string/language_tradit" />        <Button            android:id="@+id/english"            style="@style/language_btn"            android:layout_gravity="center"            android:layout_marginTop="10dp"            android:text="@string/language_english" />        <Button            android:id="@+id/japanese"            style="@style/language_btn"            android:layout_gravity="center"            android:layout_marginTop="10dp"            android:text="@string/language_japanese" />    </LinearLayout></LinearLayout>

3、ParameterManager 
public class ParameterManager {    public static int lang = 2;                         public final static int ZH = 1;    public final static int ZH_HK = 2;    public final static int EN = 3;    public final static int JA_JP = 4;    private static final String PARAMETER = "valiantman.languagesetting";    private static final String LANG="lang";    private static ParameterManager instance = null;    private Context context = null;    public ParameterManager(Context context) {        this.context = context;    }    public static ParameterManager getInstance(Context context){        if(null==instance)instance = new ParameterManager(context);        return instance;    }    public void setLang(int lang){        ParameterManager.lang = lang;        context.getSharedPreferences(PARAMETER, Context.MODE_PRIVATE).edit().putString(LANG, lang+"").apply();    }    public int getLang(){        ParameterManager.lang = Integer.valueOf(context.getSharedPreferences(PARAMETER,Context.MODE_PRIVATE).getString(LANG, "1"));        return ParameterManager.lang;    }}
4、LanguageMannager
public class LanguageMannager {    private static LanguageMannager manager;    private Context mContext;    public static LanguageMannager getManager() {        if (manager == null)            manager = new LanguageMannager();        return manager;    }    public void setLocale(Context context) {        mContext = context.getApplicationContext();        Resources resources = mContext.getResources();        Configuration config = resources.getConfiguration();        DisplayMetrics dm = resources.getDisplayMetrics();        Locale locale = null;        if(ParameterManager.getInstance(mContext).getLang()== ParameterManager.ZH){            locale = Locale.SIMPLIFIED_CHINESE;        }else if(ParameterManager.getInstance(mContext).getLang()== ParameterManager.ZH_HK){            locale = Locale.TRADITIONAL_CHINESE;        }else if(ParameterManager.getInstance(mContext).getLang()== ParameterManager.EN){            locale = Locale.US;        }else if(ParameterManager.getInstance(mContext).getLang()== ParameterManager.JA_JP){            locale = Locale.JAPAN;        }else{            return;//如果为空,第一次默认使用手机系统语言        }        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            config.setLocale(locale);        } else {            config.locale = locale;        }        resources.updateConfiguration(config, dm);    }}
5、LanguageDialog
public class LanguageDialog extends Dialog{    private Context context;    private int dialogStyleId;    private LanguageDialog mDialog;    public static final int MSG_LANGUAGE_SIMPlE = 0x01;    public static final int MSG_LANGUAGE_FANTI = 0x02;    public static final int MSG_LANGUAGE_ENGLISH = 0x03;    public static final int MSG_LANGUAGE_JAPANESE = 0x04;    public LanguageDialog(@NonNull Context context, @StyleRes int dialogStyleId) {        super(context, dialogStyleId);        this.context = context;        this.dialogStyleId = dialogStyleId;    }    private LanguageDialog creates(){        mDialog = new LanguageDialog(context, R.style.basebase_dialog_prompt);        mDialog.setContentView(R.layout.language_choise);        Button simpleChianses = (Button) mDialog.findViewById(R.id.simple);        Button fanChianses = (Button) mDialog.findViewById(R.id.fanti);        Button english = (Button) mDialog.findViewById(R.id.english);        Button japanese = (Button) mDialog.findViewById(R.id.japanese);        simpleChianses.setTag(LanguageDialog.MSG_LANGUAGE_SIMPlE);        simpleChianses.setOnClickListener(mOnClickListener);        fanChianses.setTag(LanguageDialog.MSG_LANGUAGE_FANTI);        fanChianses.setOnClickListener(mOnClickListener);        english.setTag(LanguageDialog.MSG_LANGUAGE_ENGLISH);        english.setOnClickListener(mOnClickListener);        japanese.setTag(LanguageDialog.MSG_LANGUAGE_JAPANESE);        japanese.setOnClickListener(mOnClickListener);        mDialog.setCanceledOnTouchOutside(true);        mDialog.setCancelable(true);        mDialog.getWindow().getAttributes().gravity = Gravity.CENTER;        WindowManager.LayoutParams lp = mDialog.getWindow().getAttributes();        lp.dimAmount = 0.5f;        mDialog.getWindow().setAttributes(lp);        return mDialog;    }    private View.OnClickListener mOnClickListener = new View.OnClickListener() {        @Override        public void onClick(View view) {            int tag = (Integer) view.getTag();            switch (tag) {                case LanguageDialog.MSG_LANGUAGE_SIMPlE:                    ParameterManager.getInstance(context).setLang(ParameterManager.ZH);                    break;                case LanguageDialog.MSG_LANGUAGE_FANTI:                    ParameterManager.getInstance(context).setLang(ParameterManager.ZH_HK);                    break;                case LanguageDialog.MSG_LANGUAGE_ENGLISH:                    ParameterManager.getInstance(context).setLang(ParameterManager.EN);                    break;                case LanguageDialog.MSG_LANGUAGE_JAPANESE:                    ParameterManager.getInstance(context).setLang(ParameterManager.JA_JP);                    break;            }            if (languageDialogClickListener != null)                languageDialogClickListener.onLanguageDialogClickListener(mDialog);        }    };    public void showDialog(){        if(null == mDialog){            mDialog = creates();            mDialog.show();        }else{            mDialog.show();        }    }    private LanguageDialogClickListener languageDialogClickListener;    public void setLanguageDialogClickListener(LanguageDialogClickListener languageDialogClickListener) {        this.languageDialogClickListener = languageDialogClickListener;    }    public interface LanguageDialogClickListener {        void onLanguageDialogClickListener(LanguageDialog mDialog);    }}
6、MainActivity
public class MainActivity extends Activity implements LanguageDialog.LanguageDialogClickListener{    private TextView text;    private TextView changuageLanguage;    private LanguageDialog languageDialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        text = (TextView) findViewById(R.id.text);        changuageLanguage = (TextView) findViewById(R.id.change_language);        languageDialog = new LanguageDialog(this, R.style.basebase_dialog_prompt);        languageDialog.setLanguageDialogClickListener(this);        changuageLanguage.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                languageDialog.showDialog();            }        });    }    @Override    public void onLanguageDialogClickListener(LanguageDialog mDialog) {        LanguageMannager.getManager().setLocale(this);        text.setText(R.string.text);        changuageLanguage.setText(R.string.change);        mDialog.dismiss();        finish();        startActivity(new Intent(this,MainActivity.class));    }}
7、style
    <style name="basebase_dialog_prompt" parent="@style/Theme.AppCompat.Dialog">        <item name="android:windowTitleStyle">@null</item>        <item name="android:windowNoTitle">true</item>        <item name="android:windowFrame">@null</item>        <item name="android:windowIsFloating">true</item>        <item name="android:windowIsTranslucent">false</item>        <item name="android:background">#00000000</item>        <item name="android:windowBackground">@color/transparent</item>        <item name="android:windowContentOverlay">@null</item>        <item name="android:backgroundDimAmount">0.0</item>    </style>    <style name="language_btn">        <item name="android:layout_width">180dp</item>        <item name="android:layout_height">40dp</item>        <item name="android:textColor">#ffffffff</item>        <item name="android:textSize">15dp</item>        <item name="android:gravity">center</item>        <item name="android:singleLine">true</item>        <item name="android:background">@drawable/button_selector</item>    </style>

把以上代码稍微看一下,基本上切换语言就没什么问题。有什么不足的地方还请大家指出。相互学习相互进步。








原创粉丝点击