一、android多语言

这里以汉语 英文 印尼文为例记录一下实现流程

1.1,value文件夹下添加不同语言的String.xml文件,分别是

values默认

<resources><string name="app_name">多语言例子</string><string name="lan_chinese">中文</string><string name="lan_en">英文</string><string name="lan_in">印尼文</string><string name="text_content">这是内容显示区</string><string name="select_language">选择一个语言</string>
</resources>

values-en英文

<resources><string name="app_name">mulitiLanguage</string><string name="lan_chinese">Chinese</string><string name="lan_en">English</string><string name="lan_in">Bahasa Indonesia</string><string name="text_content">Hello World!</string><string name="select_language">Choose a language</string>
</resources>

values-in印尼文

<resources><string name="app_name">Multi-bahasa</string><string name="lan_chinese">Cina</string><string name="lan_en">Inggris</string><string name="lan_in">Indonesia</string><string name="text_content">Hello dunia!</string><string name="select_language">Pilih bahasa</string>
</resources>

1.2,创建BaseActivity类,然后将多语言的切换放到这里。原因是我们可以在父类里面调用recreate()方法切换多语言(当然也可以killProcess重启应用)

在这里我们的处理方法是将用户的语言选择用Sharepreference存储起来,然后在应用一开启就查找Sharepreference中的值,选择对应的语言,然后这里是多语言的核心代码

Configuration config = getResources().getConfiguration();
config.locale = new Locale(sta);
getResources().updateConfiguration(config, getResources().getDisplayMetrics());

关于BaseActivity的所有代码也贴出来

public class BaseActivity extends Activity{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);EventBus.getDefault().register(this);changeAppLanguage();}@Subscribe(threadMode = ThreadMode.MAIN)public void onEvent(String str) {switch (str) {case "EVENT_REFRESH_LANGUAGE":changeAppLanguage();recreate();//刷新界面break;}}public void changeAppLanguage() {String sta = getLanguageLocal(this);if(sta != null && !"".equals(sta)){// 本地语言设置Configuration config = getResources().getConfiguration();config.locale = new Locale(sta);/** todo 对于config的locale属性配置,这里还可以这样写* config.locale = Locale.TRADITIONAL_CHINESE;config.locale = Locale.ENGLISH;config.locale = Locale.SIMPLIFIED_CHINESE;config.locale = Locale.TRADITIONAL_CHINESE;* */getResources().updateConfiguration(config, getResources().getDisplayMetrics());}}public static void setLanguageLocal(Context context, String language){SharedPreferences preferences;SharedPreferences.Editor editor;preferences = PreferenceManager.getDefaultSharedPreferences(context);editor = preferences.edit();editor.putString("language", language);editor.commit();}public static String getLanguageLocal(Context context){SharedPreferences preferences;preferences = PreferenceManager.getDefaultSharedPreferences(context);String language = preferences.getString("language", "");return language;}@Overrideprotected void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);}
}

1.3,调用的时候直接用EventBus发送事件就可以了

public class SettingActivity extends BaseActivity{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setTitle("设置Activity");final String[] cities = {getString(R.string.lan_chinese), getString(R.string.lan_en),getString(R.string.lan_in)};//dialog显示用的final String[] locals = {"zh_CN", "en","in"};//保存到本地,把用户选择的当前语言存储起来Button button = findViewById(R.id.btn_setting);button.setText("Language");button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this);builder.setIcon(R.mipmap.ic_launcher);builder.setTitle(R.string.select_language);builder.setItems(cities, new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){setLanguageLocal(SettingActivity.this, locals[which]);EventBus.getDefault().post("EVENT_REFRESH_LANGUAGE");}});builder.show();}});}}

1.4,然后这里贴一下常用的多语言文件夹文件

Arabic, Egypt (ar_EG) -----------------------------阿拉伯语,埃及
Arabic, Israel (ar_IL) -------------------------------阿拉伯语,以色列
Bulgarian, Bulgaria (bg_BG) ---------------------保加利亚语,保加利亚
Catalan, Spain (ca_ES) ---------------------------加泰隆语,西班牙
Czech, Czech Republic (cs_CZ) -----------------捷克语,捷克共和国
Danish, Denmark(da_DK) ------------------------丹麦语,丹麦
German, Austria (de_AT) -------------------------德语,奥地利
German, Switzerland (de_CH) -------------------德语,瑞士
German, Germany (de_DE) ----------------------德语,德国
German, Liechtenstein (de_LI) ------------------德语,列支敦士登的
Greek, Greece (el_GR) ----------------------------希腊语,希腊
English, Australia (en_AU) -------------------------英语,澳大利亚
English, Canada (en_CA) --------------------------英语,加拿大
English, Britain (en_GB) ----------------------------英语,英国
English, Ireland (en_IE) -----------------------------英语,爱尔兰
English, India (en_IN) --------------------------------英语,印度
English, New Zealand (en_NZ) ---------------------英语,新西兰
English, Singapore(en_SG) --------------------------英语,新加坡
English, US (en_US) -----------------------------------英语,美国
English, Zimbabwe (en_ZA) --------------------------英语,津巴布韦
Spanish (es_ES) ----------------------------------------西班牙
Spanish, US (es_US) -----------------------------------西班牙语,美国
Finnish, Finland (fi_FI) ---------------------------------芬兰语,芬兰
French, Belgium (fr_BE) -------------------------------法语,比利时
French, Canada (fr_CA) -------------------------------法语,加拿大
French, Switzerland (fr_CH) --------------------------法语,瑞士
French, France (fr_FR) --------------------------------法语,法国
Hebrew, Israel (he_IL) ---------------------------------希伯来语,以色列
Hindi, India (hi_IN) -------------------------------------印地语,印度
Croatian, Croatia (hr_HR) ----------------------------克罗地亚语,克罗地亚
Hungarian, Hungary (hu_HU) ------------------------匈牙利语,匈牙利
Indonesian, Indonesia (id_ID) ------------------------印尼语,印尼
Italian, Switzerland (it_CH) ----------------------------意大利语,瑞士
Italian, Italy (it_IT) ---------------------------------------意大利语,意大利
Japanese (ja_JP) ----------------------------------------日语
Korean (ko_KR) ------------------------------------------朝鲜语
Lithuanian, Lithuania (lt_LT) --------------------------立陶宛语,立陶宛
Latvian, Latvia (lv_LV) ---------------------------------拉托维亚语,拉托维亚
Norwegian-Bokmol, Norway(nb_NO) ---------------挪威语,挪威
Dutch, Belgium (nl_BE) --------------------------------荷兰语,比利时
Dutch, Netherlands (nl_NL) ---------------------------荷兰语,荷兰
Polish (pl_PL) -------------------------------------------波兰
Portuguese, Brazil (pt_BR) ---------------------------葡萄牙语,巴西
Portuguese, Portugal (pt_PT) ------------------------葡萄牙语,葡萄牙
Romanian, Romania (ro_RO) ------------------------罗马尼亚语,罗马尼亚
Russian (ru_RU) ----------------------------------------俄语
Slovak, Slovakia (sk_SK) ------------------------------斯洛伐克语,斯洛伐克
Slovenian, Slovenia (sl_SI) ---------------------------斯洛文尼亚语,斯洛文尼亚
Serbian (sr_RS) ----------------------------------------塞尔维亚语
Swedish, Sweden (sv_SE) ----------------------------瑞典语,瑞典
Thai, Thailand (th_TH) --------------------------------泰语,泰国
Tagalog, Philippines (tl_PH) --------------------------菲律宾语,菲律宾
Turkish, Turkey (tr_TR) -------------------------------土耳其语,土耳其
Ukrainian, Ukraine (uk_UA) --------------------------联合王国
Vietnamese, Vietnam (vi_VN) -----------------------越南语,越南
Chinese, PRC (zh_CN)--------------------------------中文,中国
Chinese, Taiwan (zh_TW)-----------------------------中文,台湾

二、加载自定义字体

这里我们首先要将ttf字体文件放入src->main->assets->fronts文件夹下,然后生命一个Typeface对象用户字体的获取,最后调用TextView的setTypeface方法即可

private void setTextFont(){// 加载自定义字体try{TEXT_TYPE = Typeface.createFromAsset(getAssets(),"fronts/black_simplified.TTF");}catch(Exception e){Log.i("MainActivity","加载第三方字体失败。") ;TEXT_TYPE = null ;}if(TEXT_TYPE != null){textView.setTypeface(TEXT_TYPE) ;}}

猛戳这里下载demo

解析android多语言与自定义字体相关推荐

  1. android studio 自定义字体,Android Studio中的自定义字体

    如何在android studio中创建自定义字体? 我试图使用自定义字体,我读过,我想将字体放在资产/字体. 我已经搜索了很长时间,但很难找到帮助. 我哪里错了?我真的不知道该怎么做. 我写下了所有 ...

  2. Android多语言切换,字体风格,简体转繁体

    DEMO地址:https://github.com/zhaopingfu/LanguageTypeface Android中多语言切换 在线简体中文转为繁体中文:http://www.vifo.com ...

  3. android 开发app使用自定义字体

    在Android中是可以在开发app的时候使用自定义字体的. 在开发app的时候,界面可能要使用到第三方的字体,这时候就需要执行如下操作: 1.在项目中创建font文件夹,存放第三方字体的ttf文件 ...

  4. android使用艺术字,自定义字体

    下面是我自己写的Demo出来的效果! 具体操作步骤也比较简单,先建一个assets文件夹,如下图 接下来把字体库拷贝到asstes中,字体库有需要的话可以给我发邮件,我的qq邮箱:956431651@ ...

  5. android xml黑体字_Android中快速实现自定义字体!

    前言:我们都知道,Android中默认的字体是黑体,而大多数app也都是使用的这种字体,但我们发现,大多数app中,个别地方字体非常好看,例如app的标题栏,菜单栏等地方,那他们是怎么做到的呢?有两种 ...

  6. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

  7. android自带中文字体,Android更换系统默认显示的字体使用自定义字体

    序言 上一篇Android 自定义字体,更换系统默认显示的字体使用自定义字体有讲到怎样指定控件显示指定字体,怎样整个软件显示指定字体,怎样WebView加载指定字体,但是还留下一个怎样修改整个系统的默 ...

  8. Android:更好的自定义字体方案

    http://ryanhoo.github.io/blog/2014/05/05/android-better-way-to-apply-custom-font/ 情景 解决方案 1)Android默 ...

  9. android 自定义字体 ttf,Android APP支持自定义字体

    情景:需要为整个应用替换自定义字体. Android对于文字的字体设置主要是通过以下两个对象 FontFamily.Typeface 在XML文件中设置单个字体: android:id="@ ...

最新文章

  1. 边工作边刷题:70天一遍leetcode: day 27
  2. 窗体的扩展样式GWL_EXSTYLE: 用于SetWindowLong
  3. java 把URL中的中文转换成utf-8编码
  4. Java语言Socket接口用法详解
  5. 第一:Python安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
  6. 单例模式几种不同实现方式?
  7. 【Java】@ResponseBody 返回JsonObject
  8. ps图层组快捷键 一次打开或关闭所有的顶级图层组
  9. 新浪微博开放平台注册样例
  10. 向 AppStore iOS 苹果appstore 提交新版本app出现问题
  11. 弘扬中国文化创作发展文学建设事业,间谈小说 “文味”和“接笔 ”的看法...
  12. Apache Airflow调度中心发布任务步骤
  13. 小米nfc怎么复制门禁卡
  14. 在线2进制8进制10进制16进制进制转换工具
  15. 光栅渲染器(五)2d-3d坐标系
  16. 长风破浪会有时,直挂云帆济沧海——纪念2020,展望2021
  17. Matlab-VISSIM联合仿真
  18. Unity(物理引擎)
  19. 计算机软件技术实习 项目一 简单计算器的实现(实验准备)1-(1)
  20. linux生成目录间补丁,linux打补丁 patch

热门文章

  1. C++ lazy evaluation(延迟计算或惰性求值)介绍
  2. 基于STM32标准库建立Keil-MDK工程模板(STM32F407ZG)
  3. 读《最重要的事只有一件》有感
  4. 四级网络工程师试题九
  5. java stdin怎么用_如何用Java编写ssh的stdin?
  6. 使用python将ppt文件批量转为pptx、批量提取ppt中的文字保存
  7. 系统初始化配置资源失败教程
  8. 分析方法10---AARRR模型分析方法
  9. ARM与高校联合研制基于机器学习的柔性传感器
  10. 随想002:设计规范