android 在应用中切换语言

场景: 在设置中切换中英文,然后跳转MainActivity....

步骤:

1.在MyApplication 中初始化语言

String savedLanguage = LanguageUtil.getSavedLanguage();
if(TextUtils.isEmpty(savedLanguage)){
    LanguageUtil.setLanguage("cn"); // 设置默认语言为 "cn"
}

2.在  MainActiity 中 @Override onNewIntent()这个方法 , 如果不重写,当launch mode 为single task 时不会刷新

@Override
protected void onNewIntent(Intent intent) {
    if (intent.getAction() == "language changed") {
        finish();
        startActivity(new Intent(this, MainActivity.class));
    } else {
        super.onNewIntent(intent);
    }
}

在  MainActiity 中 @Override onNewIntent()这个方法 , 如果不重写,当launch mode 为single task 时不会刷新

3.设置界面代码和布局文件

public class SettingActivity extends BaseActivity {

    RadioGroup rgLanguage;
    RadioButton rbCn;
    RadioButton rbEn;
    private int checkedRadioButtonId;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        rgLanguage = super.$(this, R.id.rgLanguage);
        rbCn = super.$(this, R.id.rbCn);
        rbEn = super.$(this, R.id.rbEn);

        if ("en".equals(LanguageUtil.getSavedLanguage())) {
            rbEn.setChecked(true);
        } else {
            rbCn.setChecked(true);
        }
        checkedRadioButtonId = rgLanguage.getCheckedRadioButtonId();

        super.$(this, R.id.btnConfirm).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (checkedRadioButtonId != rgLanguage.getCheckedRadioButtonId()) {
                    if (rbCn.isChecked()) {
                        LanguageUtil.setLanguage("cn");
                    } else if (rbEn.isChecked()) {
                        LanguageUtil.setLanguage("en");
                    }

                    finish();
                    Intent intent = new Intent(MyApplication.getContext(), FirstActivity.class);
                    intent.setAction("language changed");
                    startActivity(intent);
                } else {
                    finish();
                }
            }
        });
    }
}

设置界面的xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/switcher"/>

    <RadioGroup
        android:id="@+id/rgLanguage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RadioButton
            android:id="@+id/rbCn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="中文"/>

        <RadioButton
            android:id="@+id/rbEn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="English"/>
    </RadioGroup>

    <Button
        android:id="@+id/btnConfirm"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/confirm"/>

</LinearLayout>

4.LanguageUtil 代码
public class LanguageUtil {

    /**
     * 设置语言
     *
     * @param language "cn" = 中文, "en" = 英文
     */
    public static void setLanguage(String language) {
        Resources resources = MyApplication.getContext().getResources();
        Configuration configuration = resources.getConfiguration();
        configuration.locale = new Locale(language);
        resources.updateConfiguration(configuration, null);

        saveLanguage(language);
    }

    public static void saveLanguage(String language) {
        MyApplication.getContext().getSharedPreferences("settings", Context.MODE_PRIVATE)
                .edit().putString("language", language).commit();
    }

    public static String getSavedLanguage() {
        return MyApplication.getContext().getSharedPreferences("settings", Context.MODE_PRIVATE)
                .getString("language", null);
    }
}
时间: 2024-07-31 13:06:11

android 在应用中切换语言的相关文章

Android系统切换语言的时候APP无法更新资源文件的解决方法

你的APP支持多语言环境,假如它正在后台运行,此时用户去更换系统语言,等系统语言换好后直接从后台打开它,此时用户会发现你的界面语言没有和系统语言保持一致:为什么?主要是界面资源没有重新加载 如果你是属于自己在APP内设置语言切换,那么就可以直接在你设置切换的那个activity里做处理,重新启动一次该activity就可以了,但是如果你的APP和我类似本身是没有切换语言功能的,只是跟随系统的,那么你不可能在所有的activity里处理吧!所以我这里就直接在application中重新启动一次ap

Android系统切换语言更新应用界面方法

最近做的一个升级应用,在下载升级包的过程中又有一个toast类型的dialog悬浮在屏幕右上角,这个时候切换系统语言会出现问题. 当主屏幕为升级应用时,切换系统语言升级应用重启,而重启后并不能自动断点续传切换前的下载进度:当主屏幕为launcher的时候,切换系统语言进度条上的提示语言并不能跟着切换: 解决这一问题主要分为以下几步: 1.设置系统切换语言不重启属性,在menifest的activity中设置 android:configChanges="locale|layoutDirectio

Android 应用内切换语言

extends :http://bbs.51cto.com/thread-1075165-1.html,http://www.cnblogs.com/loulijun/p/3164746.html 1. 多国语言: 在res目录下建立不同名称的values文件来调用不同的语言包Values文件汇总如下:中文(中国):values-zh-rCN中文(台湾):values-zh-rTW中文(香港):values-zh-rHK英语(美国):values-en-rUS英语(英国):values-en-r

〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)

Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译 1 #!/usr/bin/env python 2 # encoding: utf-8 3 4 import os, sys, getopt 5 import xml.dom.minidom 6 import subprocess 7 from xml.dom.minidom import Node 8 9 # 判断是否是App项目依据 10 Axml='AndroidMan

我的Android进阶之旅------&gt;Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项

今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.所以首先我得把系统的语言切换到波兰语,问题是哪个是波兰语呢? 我还真的不认识哪个列表项代表着波兰语.如下图所示:进入到[设置]-[语言和输入法]-[语言]列表后,我就傻眼了,哪个是波兰语呢?本文将介绍如何在列表中找到相应语言所对应的列表项. ([Settings]-[Language & input]-[Language]) 哪个是波兰语呢?好吧,我只认识 日本语.中文.英语的几项,其他的

[iOS]如何在iOS开发中切换显示语言实现国际化

1.在Project设置,添加中英两种语言: 2.新建Localizable.strings文件,作为多语言对应的词典,存储多种语言,点击右侧Localization,勾选中英: 3.添加一个字段, 在English中,添加:"SUBMIT_BTN_TITLE" = "Go"; 在Chinese中,添加:"SUBMIT_BTN_TITLE" = "开始"; 4.一个工具类GDLocalizableController,用来切换

Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的 我们先来看一张传播久远的图片' 一.各种数据类型介绍 整型 整形包括短整型.整形和长整形. 短整形 short a=1; 整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前.高位在

android 导航栏中的按钮的点击切换

Drawable drawable_home = res.getDrawable(R.drawable.main_home_selected);//图片 drawable_home.setBounds(0, 0, drawable_home.getMinimumWidth(), drawable_home.getMinimumHeight());//设置边距 home_bt.setCompoundDrawables(null, drawable_home, null, null);//设置按钮b

App内切换语言

转载请注明出处 http://www.cnblogs.com/cnwutianhao/p/6746981.html 前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言.啥意思,就是 英.中.法.德.日...语言随意切换. (本案例采用Data-Bingding模式,麻麻再也不用担心我findViewBy不到Id了哈哈,开个玩笑) 先上示例图: 代码实现: 布局文件(Data-Binding模式),很简单就是两行文字 <?xml version="1.