У меня есть три вида деятельности. Основная деятельность, настройки Активность и настройка деятельностиНазвание панели действий исчезает после воссоздания активности
Главное открывает настройки, открывающие программу установки.
В настройки деятельности я позволяю Изменить язык пользователя, которые будут храниться в SharedPreferences
В Main и настройки у меня есть слушателя для изменения SharedPreference.
об изменении я воссоздаю эти действия (Основное и настройки). Весь текст находится на новом языке, но заголовок панели действий исчез и снова появляется (на правильном языке) после поворота устройства. Это не работает, чтобы установить заголовок с помощью setTitle, а getTitle возвращает правильный текст. Это просто невидимо.
Любые идеи о том, как заставить заголовок ActionBar отображаться без поворота устройства?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ctx = getBaseContext();
Language.loadLocale(ctx);
setContentView(R.layout.activity_main);
act = this;
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
activeTab = position;
}
});
actionBar.addTab(
actionBar.newTab()
.setText(R.string.title_tab1_active_order_name)
.setTabListener(this));
actionBar.addTab(
actionBar.newTab()
.setText(R.string.title_tab2_history_name)
.setTabListener(this));
actionBar.addTab(
actionBar.newTab()
.setText(R.string.title_tab3_tools_name)
.setTabListener(this));
listenOnLangChange();
}
private void listenOnLangChange(){
//handles language changes
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// Implementation
if (key.equals("setLanguageKey")){
Configuration config = Language.loadLocale(ctx);
onConfigurationChanged(config);
}
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
act.recreate();
}
От языка класса:
public static Configuration changeLang(String lang, Context ctx)
{
String languageToLoad = lang; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
ctx.getResources().updateConfiguration(config,
ctx.getResources().getDisplayMetrics());
Log.d("CHANGE", languageToLoad);
return config;
}
public static Configuration loadLocale(Context ctx)
{
String langPref = "setLanguageKey";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
String language = prefs.getString(langPref, "");
Log.d("LOAD", language);
return changeLang(language, ctx);
}
Может быть, поставить 'android: showAsAction =" always "' в xml этого? – g00dy
Можете ли вы разместить свой onCreate()? чувствует, что есть некоторые проблемы с построением View – bofredo
У меня есть меню с тремя элементами, которые имеют showAsAction = "always" на них. Они корректно обновляются с новым языком. К сожалению, это просто название, которое исчезает. –