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

来源:互联网 发布:武汉淘宝产品拍摄 编辑:程序博客网 时间:2024/06/03 06:30

最近有一段时间在忙别的事情,在做语言设置的时候,发现网上的一些方法都是在程序里面有效,但是退出程序重新启动的时候就无效了。我也苦恼了一会,通过谷歌找到了一个解决的办法,特此写下。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 {    @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。新人请多关照。

0 0
原创粉丝点击