android 多语言包的切换

顾名思义,就是在软件中实现多语言的功能~

首先必须先设好不同语言的资源文件,命名规则自行百度,我给大家一个参考大家就懂啦。

然后关键是代码的实现,但是我这个方法只对执行后出现的界面生效——简单来说,要对整个应用生效的话,就必须在应用开启的时候调用,或者执行动作后手动将软件重新刷新一遍(工作量挺大的。。。。)

 

那么在应用开启的时候怎么调用呢?

主要思路是,先做一个选择语言的界面(废话。。。),然后选择语言之后,将用户选择的语言保存下来(这里选择的是sharedpreference,因为方便嘛),然后在打开软件的时候在入口avtivity(例如MainActivity)的onCreate方法调用切换语言的方法。

首先是保存(因为是直接从项目里copy下来的,里面有的地方是跟项目相关的做法,大家大可不必完全仿照,根据上面提及的主要思路去写就好了)

    public void switchLanguage(Locale locale) {    
        SharedPreferences sharedPreferences=this.getSharedPreferences("com.demo", Context.MODE_PRIVATE);
        String keepLanguage=null;
        if(locale.equals(Locale.ENGLISH))
            keepLanguage="english";
        else if(locale.equals(Locale.SIMPLIFIED_CHINESE))
            keepLanguage="simplechinese";
        else if(locale.equals(Locale.TRADITIONAL_CHINESE))
            keepLanguage="traditionalchinese";
        sharedPreferences.edit().putString("locale", keepLanguage).commit();
}

然后在入口Activity里读取sharedpreference,知道用户选择的语言之后切换语言~

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        SharedPreferences sharedPreferences = this.getSharedPreferences(
                "com.demo", Context.MODE_PRIVATE);
        Resources resources = getResources();// 获得res资源对象
        Configuration config = resources.getConfiguration();// 获得设置对象
        DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
        if (sharedPreferences.getString("locale", "simplechinese").equals(
                "english"))
            config.locale = locale.ENGLISH;
        else if (sharedPreferences.getString("locale", "simplechinese").equals(
                "simplechinese"))
            config.locale = locale.SIMPLIFIED_CHINESE;
        else if (sharedPreferences.getString("locale", "simplechinese").equals(
                "traditionalchinese"))
            config.locale = locale.TRADITIONAL_CHINESE;
        resources.updateConfiguration(config, dm);
                setContentView(R.layout.layout_loading_activity);
}                

因为只会对设置之后的界面生效,所以setContentView方法该放哪里就要好好思考了哦~

posted @ 2014-04-11 11:04  不想换名了  阅读(2562)  评论(0编辑  收藏  举报