Android实现应用内多语言切换

本文地址:https://blog.csdn.net/qq_40785165/article/details/113901406,转载需附上此地址

大家好,我是小黑,一个还没秃头的程序员~~~

只要以积极的心态去观察、去思考,就会发现,事情远没有想像中的那样困难。

现在很多App内都具备了多语言切换的功能,今天的内容就是实现这个功能,效果如下:

话不多说,直接上步骤

一.准备一个string.xml文件,里面随便准备一些中文字符串

<resources>
    <string name="app_name">多语言翻译案例</string>
    <string name="str1">你好</string>
    <string name="str2">我是</string>
    <string name="str3">多语言</string>
    <string name="str4">翻译</string>
    <string name="str5">切换成中文</string>
    <string name="str6">切换成英文</string>
    <string name="str7">切换成法语</string>
    <string name="str8">跳转到下个页面</string>
</resources>

二.在AndroidStudio中安装一个插件,搜索“AndroidLocalize”,这个插件是用来翻译文本资源文件的,在string.xml文件上右键选择转换语言,选择想要的语言即可,之后就会自动生成不同语言的资源文件,      如图所示

 

三:编写代码进行切换,这里只贴出主要代码,其他代码想要的可以去下载源代码查看:https://gitee.com/fjjxxy/multi-language-demo.git

切换语言是通过修改Locale属性进行修改语言的,这里有个地方需要注意,如果你只是单纯的切换语言,之前没有finish的页面还是会保留原来的语言,所以你也可以对所有的activity进行堆栈管理,将所有的activity进行重新创建(recreate),即可将原先的页面的语言一并更新,下面分别是两种做法的代码

/**
     * 这个方法虽然更新了资源但是只能以后的界面生效,之前没有finish的页面还是保留原来的语言
     *
     * @param locale
     * @param context
     */
    public static void shiftLanguage(Locale locale, Context context) {
        Resources resources = context.getResources();
        Configuration config = resources.getConfiguration();
        DisplayMetrics dm = resources.getDisplayMetrics();
        config.locale = locale;
        resources.updateConfiguration(config, dm);

    }
 private void changeAllActivitysLanguage(Locale locale) {
        //使用堆栈管理器进行遍历重新创建
        Stack<Activity> allActivityStacks = AppManager.getInstance().getAllActivityStacks();
        for (Activity allActivityStack : allActivityStacks) {
            shiftLanguage(locale, allActivityStack, this);
        }
    }
    /**
     * 这个方法是为了让全部的activity都修改语言
     *
     * @param locale
     * @param activity
     * @param context
     */
    public static void shiftLanguage(Locale locale, Activity activity, Context context) {
        Resources resources = context.getResources();
        Configuration config = resources.getConfiguration();
        DisplayMetrics dm = resources.getDisplayMetrics();
        config.locale = locale;
        resources.updateConfiguration(config, dm);
        if (!(activity instanceof SecondActivity)) {
            activity.recreate();
        }

    }

将相关的Locale参数传入方法中即可,例如

mTvChangeToChinese.setOnClickListener(v -> shiftLanguage(Locale.CHINESE,this))

到此,Android应用多语言切换的功能也就完成了,还是很简单的,这里就更加得注意平时的编码习惯了,尽量把字符串都放到资源文件中,方便以后进行切换语言,最后,也希望喜欢我文章朋友们可以帮忙点赞、收藏、评论,也可以关注一下,如果有问题可以在评论区提出,谢谢大家的支持!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值