多语言切换

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>

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








  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值