切换app android,Android app内语言环境切换

逻辑很简单:

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 mLocalStack = new Stack();

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));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值