【问题标题】:Bottom Navigation is not updated according the default language底部导航未根据默认语言更新
【发布时间】:2020-06-12 07:36:11
【问题描述】:

实际上我正在创建一个多语言(英语、印地语和旁遮普语)android应用程序,所以我将用户语言首选项保存在共享首选项中,并在每个活动并更新字符串。但问题是当我选择印地语时,整个活动字符串正确更改为印地语,但底部导航仅设置为英语,当我选择旁遮普语时,整个活动字符串转换完美,但底部导航设置为印地语等循环方式,请查看以下测试用例

                 user Selected Language                 |            Bottom Navigation Language
                                                        |   
First time:         English                             |               English
Second time:        Hindi                               |               English
Third time:         Punjabi                             |               Hindi
Fourth time:        English                             |               Punjabi
Fifth time          Hindi                               |               English

 and so on...

代码:

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sessionManager = new SessionManager(getApplicationContext());
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        userDefaultLanguage(sessionManager.getUserLanguage());
        initViews();
    }
    Locale myLocale;
    String currentLanguage = "en";
    private void userDefaultLanguage(String localeName) {
            myLocale = new Locale(localeName);
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
       }

    private void initViews() {
        setSupportActionBar(mToolBar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        loadFragment(MainFragment.newInstance());
        navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_home:
                        toolbar_title.setText(R.string.home);
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            loadFragment(MainFragment.newInstance());
                        } else
                            connectToInternetToast();
                        return true;

                    case R.id.navigation_music:
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            toolbar_title.setText(R.string.music);
                            //   toolbar_title.setTypeface(applyFonts());
                            loadFragment(MainFragment2.newInstance());
                        } else
                            connectToInternetToast();
                        return true;

                    case R.id.navigation_gyaan:
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            toolbar_title.setText(R.string.gallery);
                            loadFragment(MainFragment3.newInstance());
                        } else
                            connectToInternetToast();
                        return true;

                    case R.id.navigation_settings:
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            Intent intent2 = new Intent(getApplicationContext(), AppInformationActivity.class);
                            startActivity(intent2);
                        } else
                            connectToInternetToast();
                        return true;
                }
                return false;
            }
        });
        toolbar_title.setText(R.string.home);
        if (CheckInternet.isNetwork(getApplicationContext())) {
            if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
                return;
            }
            mLastClickTime = SystemClock.elapsedRealtime();
        } else
            connectToInternetToast();

    }


    private void connectToInternetToast() {
        Toast.makeText(getApplicationContext(), "Connect to internet", Toast.LENGTH_LONG).show();
    }

    private void loadFragment(Fragment selectedFragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, selectedFragment);
        transaction.commit();
    }

}

【问题讨论】:

    标签: android android-layout locale bottomnavigationview


    【解决方案1】:

    我已经找到了解决办法,请查看以下代码:

    public static void userDefaultLanguage(Activity context,String localeName) {
            Locale locale;
            //Log.e("Lan",session.getLanguage());
            locale = new Locale(localeName);
            Configuration config = new 
            Configuration(context.getResources().getConfiguration());
            Locale.setDefault(locale);
            config.setLocale(locale);
            context.getBaseContext().getResources().updateConfiguration(config,
                    context.getBaseContext().getResources().getDisplayMetrics());
        } 
    

    并将此方法称为

    setLocale(MainActivity.this,sessionManager.getUserLanguage());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多