您的位置:首页 > 移动开发 > 微信开发

仿微信开发(二)--系统语言设置

2016-05-12 12:13 621 查看
最近有一段时间在忙别的事情,在做语言设置的时候,发现网上的一些方法都是在程序里面有效,但是退出程序重新启动的时候就无效了。我也苦恼了一会,通过谷歌找到了一个解决的办法,特此写下。xutils的应用在上篇文章讲了,这个不做重复讲解了。

主要的实现就是读取程序设置项,获取要更改的语言之后,重新启动活动来改变语言。注意:在绘制页面之前要先设置好语言配置项。这就是我在这两个Activity中没有用到xutils的原因(使用@Contentview加载布局在设置语言之前)。

1.创建启动页代码,添加语言选项

package com.malion.miniwechat.activity;

import java.util.Locale;

import com.malion.miniwechat.R;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

/**
* 项目启动页 通过配置项 来处理自己的逻辑 这里不能使用xutils的注入 因为在设置页面之前要进行语言设置 或者我技术不够 找不到对应的方法
* */

public class SplashActivity extends BaseActivity implements OnClickListener {

// 语言
private TextView mLanguageTV;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setLanguage();
setContentView(R.layout.activity_splash);
mLanguageTV = (TextView) findViewById(R.id.splash_language_tv);
mLanguageTV.setOnClickListener(this);
}

// 设置系统语言
private void setLanguage() {
// TODO Auto-generated method stub
Resources resource = getResources();
Configuration config = resource.getConfiguration();
SharedPreferences sharedPreference = PreferenceManager
.getDefaultSharedPreferences(this);
if ("zh".equalsIgnoreCase(sharedPreference.getString("language", null))) {
config.locale = Locale.CHINA;
} else if ("en".equalsIgnoreCase(sharedPreference.getString("language",
null))) {
config.locale = Locale.ENGLISH;
} else {
config.locale = Locale.getDefault();
}
Log.i("info", config.locale.getDisplayName());
getBaseContext().getResources().updateConfiguration(config, null);
}

// 事件点击
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.splash_language_tv:
startActivity(new Intent(SplashActivity.this, SettingActivity.class));
break;

default:
break;
}
}

}


2.创建语言设置页

package com.malion.miniwechat.activity;

import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;

import com.malion.miniwechat.R;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

@ContentView(value = R.layout.activity_setting_language)
public class SettingActivity extends BaseActivity {

@
4000
ViewInject(value = R.id.setting_language_lv)
private ListView mSettingLanguagesLv;

private String[] mLanguageName;

private ArrayAdapter<String> mAdapter;
private SharedPreferences mPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
mLanguageName = getResources().getStringArray(R.array.languages);

mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, mLanguageName);
mSettingLanguagesLv.setAdapter(mAdapter);
mSettingLanguagesLv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Resources resources = getResources();
Configuration config = resources.getConfiguration();
if (position == 1) {
mPreferences.edit().putString("language", "zh").commit();
config.locale = Locale.CHINA;
} else if (position == 2) {
mPreferences.edit().putString("language", "en").commit();
config.locale = Locale.ENGLISH;
} else {
config.locale = Locale.getDefault();
}

Log.i("info", position + config.locale.getDisplayName());
getBaseContext().getResources().updateConfiguration(config,
null);
Intent intent = new Intent(SettingActivity.this,
SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
}


通过点击设置语言的list来改变启动活动中的语言配置。文笔不好写的不是很清楚。一切看代码把(不会引入xutils的同学也可以借鉴这个代码)。下载地址http://download.csdn.net/detail/u014523456/9517740。新人请多关照。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: