底部导航未根据默认语言更新
Bottom Navigation is not updated according the default language
实际上我正在创建一个多语言(英语、印地语和旁遮普语)android应用程序所以我在共享偏好中保存了用户语言偏好并签入onCreate() 在每个 activity 中更新字符串。但问题是当我选择印地语时,整个 activity 字符串正确更改为印地语,但底部导航仅设置为英语,当我选择旁遮普语而不是整个 activity 字符串转换完美但底部导航循环设置为印地语等,请查看下方测试用例
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();
}
}
我已经找到解决方案,请查看以下代码:
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());
实际上我正在创建一个多语言(英语、印地语和旁遮普语)android应用程序所以我在共享偏好中保存了用户语言偏好并签入onCreate() 在每个 activity 中更新字符串。但问题是当我选择印地语时,整个 activity 字符串正确更改为印地语,但底部导航仅设置为英语,当我选择旁遮普语而不是整个 activity 字符串转换完美但底部导航循环设置为印地语等,请查看下方测试用例
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();
}
}
我已经找到解决方案,请查看以下代码:
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());