【问题标题】:android locale and updateConfiguration are deprecatedandroid locale 和 updateConfiguration 已弃用
【发布时间】:2017-03-01 15:39:29
【问题描述】:

我正在为英语和印地语创建多语言应用程序

按照我使用的代码,它运行良好,但有些东西已被弃用,请告诉我如何解决它,

不推荐使用的代码是

conf.locale = myLocale;
res.updateConfiguration(conf, dm);

我的完整代码:(这不是完整代码,我只是向您展示主要部分)

 private  Intent intent;
    private Locale myLocale;
    private  Resources res;
    private DisplayMetrics dm;
    private Configuration conf;

switch(lang)
                    {
                        case "no_lang":

                            editor = preferences.edit();
                            editor.putString("set_language","en");
                            editor.commit();

                            myLocale = new Locale("en");
                            res = getResources();
                            dm = res.getDisplayMetrics();
                            conf = res.getConfiguration();
                            conf.locale = myLocale;
                            res.updateConfiguration(conf, dm);
                            intent = new Intent(SplashActivity.this, MainActivity.class);
                            startActivity(intent);
                            finish();
                            break;
                        case "en":

                            editor = preferences.edit();
                            editor.putString("set_language","en");
                            editor.commit();

                            myLocale = new Locale("en");
                            res = getResources();
                            dm = res.getDisplayMetrics();
                            conf = res.getConfiguration();
                            conf.locale = myLocale;
                            res.updateConfiguration(conf, dm);
                            intent = new Intent(SplashActivity.this, MainActivity.class);
                            startActivity(intent);
                            finish();
                            break;
                        case "hi":
                            editor = preferences.edit();
                            editor.putString("set_language","hi");
                            editor.commit();

                            myLocale = new Locale("hi");
                            res = getResources();
                            dm = res.getDisplayMetrics();
                            conf = res.getConfiguration();
                            conf.locale = myLocale;
                            res.updateConfiguration(conf, dm);
                            intent = new Intent(SplashActivity.this, MainActivity.class);
                            startActivity(intent);
                            finish();
                            break;
                    }

我关注这些链接,但我没有得到它... link1, link2

【问题讨论】:

    标签: android deprecated


    【解决方案1】:

    好的,我使用@Bassel Mourjan 的this answer 解决了这个问题

    我有一个基本活动,剩下的是片段,下面是我的代码 (我在 android 7.1.1 (genymotion emu) 中测试了这段代码,它可以工作)

    从上面的链接中查看(使用)MyContextWrapper 类。

    在我的 MainActivity 按钮单击中,我正在为该活动的结果打开活动,我正在获取用户选择的语言,例如:英语、印地语、马拉地语

    主要活动:

         // i use shared preference to save my language so that when user close 
           //app and open it, then his previous language will be set
                @Override
                public void attachBaseContext(Context newBase)
                {
                    SharedPreferences preferences1 = newBase.getSharedPreferences("global",newBase.MODE_PRIVATE);
                    String lang=preferences1.getString("set_language","en"); // at start no language selected so default is english
                    super.attachBaseContext(MyContextWrapper.wrap(newBase,lang));
                }
    
    
    
        @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
    
                navigation_header_language.setOnClickListener(this);//Language button
        }
    
           @Override
            public void onClick(View v)
            {
    
                switch (v.getId())
                {
                  case R.id.navigation_header_language:
    
                        Intent i = new Intent(this, LanguageActivity.class);
                        startActivityForResult(i, 101);
    
                        break;
                }
            }
    
    // when user selects language i store it in shared preference and set result 
    // as RESULT_OK and here in onActivityResult's result_ok i simply recreate activity 
    //so that attachBaseContext called again and language set as we want
          @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (requestCode == 101) {
                    if(resultCode == Activity.RESULT_OK)
                    {
                        this.recreate();
                    }
    
                    if (resultCode == Activity.RESULT_CANCELED) {
                        //Write your code if there's no result
                    }
                }
            }
    

    这是我从 Main Activity 调用的 LanguageActivity 以获取结果

          public class LanguageActivity extends AppCompatActivity
            {
                private CardView english_language,hindi_language,marathi_language;
                private SharedPreferences preferences;
                private SharedPreferences.Editor editor;
    
                @Override
                protected void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.fragment_language);
    
                    english_language=(CardView)findViewById(R.id.english_language);
                    hindi_language=(CardView)findViewById(R.id.hindi_language);
                    marathi_language=(CardView)findViewById(R.id.marathi_language);
    
                    preferences =getSharedPreferences("global",MODE_PRIVATE);
    
                    english_language.setOnClickListener(new View.OnClickListener()
                    {
                        @Override
                        public void onClick(View v)
                        {
                            editor = preferences.edit();
                            editor.putString("set_language","en");
                            editor.commit();
                            setResultCode();
                        }
                    });
    
                    hindi_language.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v)
                        {
                            editor = preferences.edit();
                            editor.putString("set_language","hi");
                            editor.commit();
                            setResultCode();
                        }
                    });
    
                    marathi_language.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v)
                        {
                            editor = preferences.edit();
                            editor.putString("set_language","mr");
                            editor.commit();
                            setResultCode();
                        }
                    });
                }
    
                private void setResultCode()
                {   
                    Intent returnIntent = new Intent();
                    setResult(Activity.RESULT_OK,returnIntent);
                    finish();
     // when this activity close, onActivityResult method call from Mainactivity
    //and there i used this.recreate() which will recreate mMainactivity an
    //attachBaseContext will be called once again
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2021-08-31
      • 2015-09-18
      • 2018-02-11
      • 2018-03-10
      相关资源
      最近更新 更多