仿微信开发(二)--系统语言设置
2016-05-12 12:13
621 查看
最近有一段时间在忙别的事情,在做语言设置的时候,发现网上的一些方法都是在程序里面有效,但是退出程序重新启动的时候就无效了。我也苦恼了一会,通过谷歌找到了一个解决的办法,特此写下。xutils的应用在上篇文章讲了,这个不做重复讲解了。
主要的实现就是读取程序设置项,获取要更改的语言之后,重新启动活动来改变语言。注意:在绘制页面之前要先设置好语言配置项。这就是我在这两个Activity中没有用到xutils的原因(使用@Contentview加载布局在设置语言之前)。
1.创建启动页代码,添加语言选项
2.创建语言设置页
通过点击设置语言的list来改变启动活动中的语言配置。文笔不好写的不是很清楚。一切看代码把(不会引入xutils的同学也可以借鉴这个代码)。下载地址http://download.csdn.net/detail/u014523456/9517740。新人请多关照。
主要的实现就是读取程序设置项,获取要更改的语言之后,重新启动活动来改变语言。注意:在绘制页面之前要先设置好语言配置项。这就是我在这两个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。新人请多关照。
相关文章推荐
- 微信js-sdk config JavaScript签名
- Java小程序:模拟双色球开奖
- 如何在微信公众号下载保存图片??
- 微信支付
- 公众号判断用户是否已关注php代码
- Android 开发判断用户是否安装微信和QQ并跳转过去
- (高效开发)仿微信图片选择器PhotoPicker
- php微信开发中各种小技巧收集
- 微信对话框小三角形实现
- 我也有微信朋友圈了 Android实现
- 微信第三方授权登录返回错误信息: 40029
- WSTMall V1.6.0发布,支持QQ、微信登录,支持购物车信息插入数据库
- 产品知识分享:外链分享到微信的逻辑
- C#利用 Face++sdk 实现wpf小程序【1】 5/11/16
- 【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(一 、上传图片)
- Ubuntu16.04 Genymotion 模拟器上安装微信
- C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能
- iOS 支付 [支付宝、银联、微信]
- Zabbix监控配置 邮件 微信告警
- 【分享】给做技术的战友们推荐一个不错的微信公号解解闷