文档章节

Android app内语言环境切换

chong子
 chong子
发布于 2015/09/10 11:06
字数 328
阅读 807
收藏 2

逻辑很简单:

      1  app内所有activity继承自BaseActivity或BaseActivity派生出来的子类,BaseActivity中维护了一个静态的app Activity访问栈,在创建和销毁时会执行压栈和出栈操作,所以mLocalStack内维持的是app中正在运行的activity。

      2  将app的语言环境存储在SharedPreferences中,避免app重启时修改状态不改变;在BaseActivity创建时取出语言环境字符串并初始化Activity语言环境(initLang方法)。

      3  在页面切换语言时,调用BaseActivity的switchLang方法,finish当前运行的所有activity,并跳转到app主页面。


public abstract class BaseActivity extends Activity {
    // activity访问栈
    private static Stack<BaseActivity> mLocalStack = new Stack<BaseActivity>();
    protected BaseActivity             mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;

        // 压栈
        mLocalStack.add(this);

        initLang();
    }

    @Override
    protected void onDestroy() {
        // 出栈
        mLocalStack.remove(this);
        super.onDestroy();
    }

    private void initLang() {
        Resources res = getResources();
        Configuration config = res.getConfiguration();
        Locale locale = Locale.getDefault();
        String langStr = "";
        //TODO 获取Sharedpreferences中存储的app语言环境
        if("zh".equals(langStr)){
            locale = Locale.CHINA;
        }else if("en".equals(langStr)){
            locale =  Locale.ENGLISH;
        }else if{
            //.....
        }
        config.locale = locale;
        res.updateConfiguration(config, res.getDisplayMetrics());
    }
    
    protected void switchLang(String newLang){
        //TODO 更新Sharedpreferences中存储的app语言环境
        
        // finish app内存中的所有activity
        while (0 != mLocalStack.size()) {
            mLocalStack.pop().finish();
        }
        
        // 跳转到app首页
        startActivity(MainActivity.class);
    }
    
    public void startActivity(Class<? extends BaseActivity> cls) {
        startActivity(new Intent(this, cls));
    }
}


© 著作权归作者所有

chong子
粉丝 1
博文 5
码字总数 3467
作品 0
浦东
程序员
私信 提问
Android App 多语言切换

前段时间公司 App 需要实现多语言切换功能,接到任务后先 Google 了下,发现搜到的方法都比较老旧,很多都莫名其妙,比如什么 API 欺骗、反射、手动转换语系,感觉不应该这么复杂地实现(也可...

丁佳辉
2018/05/29
103
0
android app內切换语言环境

功能:app用户根据自己的语言喜好,设置app语言。语言设置只针对本app,并在下次启动应用时保留前一次启动设置。更新语言: sharePreferences存入设置语言: 语言更新后,对于之前出现且目前仍...

cywaker
2014/02/11
3.9K
0
Android应用内语言切换实现

自定义控件系列结束了,打个回马枪,补上前段时间埋下的一个坑---“应用内语言切换”。APP语言改变是一个Configuration,但是这个Configuration和android手机屏幕旋转有点不大一样。屏幕旋转...

Jack_1900
2014/07/14
17K
2
使用appium自动化测试混合应用app(android内嵌套h5表单界面),请问怎么准确控制表单页上滑幅度操作?

使用appium自动化测试混合应用app(android内嵌套h5表单界面),请问怎么准确控制表单页上滑幅度操作? 环境: appium的版本: 1.8.1 测试用例开发语言:java 文档上面给的上滑操作提示是采用...

streamlong
2018/07/04
687
0
Flutter尝鲜:跨平台移动应用开发

开始之前 本人使用Flutter开发的一个图文App《每日图文》,可以同时运行在Android和iOS上,欢迎体验,喜欢的话还不吝Star一下。 叮叮叮~ 传送门 Flutter为何物? 随着移动App开发成本越来越...

开发的猫
2018/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部