当前位置: 代码迷 >> Android >> 安卓多语言设立
  详细解决方案

安卓多语言设立

热度:28   发布时间:2016-04-28 01:53:55.0
安卓多语言设置

            最近做的项目中使用到了多语言切换功能。那么多语言切换首先要注意的是,在xml文件中和代码当中,所有使用文本字符串的地方,确保所使用的string文本是从values文件夹下的string.xml中获取。

             那么做多语言需要两到三个文件。1 values文件夹下的string.xml文件这里存放的是你app在没有进行语言设置的时候默认使用的语言类型。2 values-en文件夹(这个文件夹是自己创建的,当然也可以是别的名字string.xml 这里存放的是每个文本对应的英文文本。3values-tw(繁体中文)

            需要注意一下,三个文件夹下的string.xml文件中的文本变量,必须保证数目一致,对应的名称一致。

            下面是切换代码部分。我挑选出重要的解释。

public class ChangeLanquageActivity extends BaseActivity implements		OnClickListener {	private RelativeLayout cnBtn, twBtn, enBtn;	private ImageView cnBtn_choose, twBtn_choose, enBtn_choose;	private Button leftBtn;	private TextView topTtitle;	SharedPreferences Sp;// 保存语言切换的SP,以便后续的网络请求中,发送当前语言类型	@Override	protected int getContentLayout() {		return R.layout.activity_language;	}	@Override	protected void initGui() {		leftBtn = (Button) findViewById(R.id.leftBtn);		topTtitle = (TextView) findViewById(R.id.topTitle);		cnBtn = (RelativeLayout) findViewById(R.id.cnBtn);		twBtn = (RelativeLayout) findViewById(R.id.twBtn);		enBtn = (RelativeLayout) findViewById(R.id.enBtn);		cnBtn_choose = (ImageView) findViewById(R.id.cnBtn_choose);		twBtn_choose = (ImageView) findViewById(R.id.twBtn_choose);		enBtn_choose = (ImageView) findViewById(R.id.enBtn_choose);		Sp = getSharedPreferences("userInfo", this.MODE_WORLD_WRITEABLE);	}	@Override	protected void initAction() {		cnBtn.setOnClickListener(this);		twBtn.setOnClickListener(this);		enBtn.setOnClickListener(this);		leftBtn.setOnClickListener(this);	}	@Override	protected void initData() {//初始化切换语言的按钮的文本,在这里说明一下,<span style="font-family: Arial, Helvetica, sans-serif;">MBConfig.Language是用于保存当前语言环境的全局变量,0,1,2代表三种语言设置</span>		topTtitle.setText(R.string.language_set);		if (StringUtils.equals(MBConfig.Language, "0")) {			// 繁体中文			cnBtn_choose.setVisibility(View.INVISIBLE);			twBtn_choose.setVisibility(View.VISIBLE);			enBtn_choose.setVisibility(View.INVISIBLE);		} else if (StringUtils.equals(MBConfig.Language, "1")) {			// 英文			cnBtn_choose.setVisibility(View.INVISIBLE);			twBtn_choose.setVisibility(View.INVISIBLE);			enBtn_choose.setVisibility(View.VISIBLE);		} else if (StringUtils.equals(MBConfig.Language, "2")) {			// 简体中文			cnBtn_choose.setVisibility(View.VISIBLE);			twBtn_choose.setVisibility(View.INVISIBLE);			enBtn_choose.setVisibility(View.INVISIBLE);		}	}	@Override	public void onClick(View v) {//点击事件,点击后切换语言配置。切换的配置用sp保存,以便下次进入的时候使用。中间的按钮现隐藏逻辑可以不用考虑。		 		Resources resources = getResources();		Editor edit = Sp.edit();		switch (v.getId()) {		case R.id.leftBtn:			hideProgressDialog();			finish();			break;		case R.id.cnBtn:			cnBtn_choose.setVisibility(View.VISIBLE);			twBtn_choose.setVisibility(View.INVISIBLE);			enBtn_choose.setVisibility(View.INVISIBLE);			changeAppLanguage(resources, "CN");			MBConfig.Language = "2";			edit.putString("LANGUAGE", "2");			edit.commit();			 			 			hideProgressDialog();			finish();			break;		case R.id.twBtn:			cnBtn_choose.setVisibility(View.INVISIBLE);			twBtn_choose.setVisibility(View.VISIBLE);			enBtn_choose.setVisibility(View.INVISIBLE);			changeAppLanguage(resources, "TW");			MBConfig.Language = "0";			edit.putString("LANGUAGE", "0");			edit.commit();			 			 			hideProgressDialog();			finish();			break;		case R.id.enBtn:			cnBtn_choose.setVisibility(View.INVISIBLE);			twBtn_choose.setVisibility(View.INVISIBLE);			enBtn_choose.setVisibility(View.VISIBLE);			changeAppLanguage(resources, "EN");			MBConfig.Language = "1";			edit.putString("LANGUAGE", "1");			edit.commit();			 			hideProgressDialog();			finish();			break;		default:			break;		}	}	public void changeAppLanguage(Resources resources, String lanAtr) {//切换语言的方法		Configuration config = resources.getConfiguration();//读取系统配置信息		DisplayMetrics dm = resources.getDisplayMetrics();		if (lanAtr.equals("CN")) {			config.locale = Locale.CHINA;		} else if (lanAtr.equals("TW")) {			config.locale = Locale.TAIWAN;		} else if (lanAtr.equals("EN")) {			config.locale = Locale.ENGLISH;		} else {			config.locale = Locale.getDefault();		}		//上面是对应三种情况下设置三种语言设置		resources.updateConfiguration(config, dm);//刷新语言设置信息,这步不能少。	}

  相关解决方案