Я пишу приложение, поддерживающее многоязыковой интерфейс, и когда я изменяю региональную активность, воссоздаю, и некоторые поля или компоненты не меняют значения через локаль некоторых устройств.
Вот мой код:
public class BaseActivity extends AppCompatActivity implements BaseNavigator {
@Override
public void onLanguageChanged(String language) {
alertDialog.hide();
Resources resources = getBaseContext().getResources();
Configuration configuration = resources.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
configuration.setLocale(Locale.forLanguageTag(language));
}
resources.updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
Log.d("Language: ", "changeLanguage: " + language);
recreate();
}
public void showDialogView() {
AlertDialog.Builder addBuilder = new AlertDialog.Builder(this);
addBuilder.setView(languageDialogViewBinding.getRoot());
alertDialog = addBuilder.create();
alertDialog.show();
}
}
Мой класс TariffActivity ниже:
public class TariffActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
} else if (id == R.id.nav_language) {
setupChangeLanguageDialog();
showDialogView();
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
Вот мой код тарифа_item.xml:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/monthTextView"
android:text="@string/txt_money"
... />
<TextView
android:id="@+id/textView10"
android:text="@string/tariff_minutes"... />
<TextView
android:id="@+id/textView17"
android:text="@string/tariff_internet"
.../>
<TextView
android:id="@+id/textView18"
android:text="@string/tariff_sms"
... />
Если вы видите эту картинку, некоторые тексты на русском и другие на английском