多语言切换
来源:互联网 发布:淘宝一颗钻多少钱 编辑:程序博客网 时间: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>
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、LanguageMannagerpublic 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
- 应用程序多语言切换
- iOS多语言切换
- php 多语言切换
- android多语言切换
- struts 多语言切换
- android多语言切换
- thinkphp多语言切换
- Android_App多语言切换
- discuz多语言切换
- ios多语言切换
- 多语言切换
- Android多语言切换
- Android多语言切换
- 前端多语言切换
- Android多语言切换
- 多语言切换
- WPF多语言切换
- 多语言切换
- Qt 所有权问题导致多线程报错
- gulp顺序执行任务
- 负载均衡配置,
- ubuntu的Files资源管理器打不开解决方案
- Swift HTML富文本显示
- 多语言切换
- java线程安全的单利模式
- 水波纹-iOS
- 数字证书申请流程
- Spring Boot学习笔记-整合Mybatis (三)
- leetcode-第十四周
- Android Handler 机制
- DHCP服务器安装、测试
- jquery暂无图片替换