Ich wollte eine Option hinzufügen, um die Anwendungssprache mit gemeinsamen Einstellungen zu ändern. Ich habe Sprache wie "en" oder "fa" in den gemeinsamen Einstellungen gespeichert.Wie verwende ich den Kontext-Wrapper, um die App-Sprache in Runtime zu ändern?
Jetzt muss ich freigegebene Einstellungen Daten als Sprache festlegen. Ich habe versucht, This code zu verwenden, aber ich hatte einige Probleme.
Für diesen Code verwenden sollte ich meine Aktivitäten Kontext mit wickeln:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(MyContextWrapper.wrap(newBase,languageFromPrefs));
}
ich eine Methode für schrieb von Gemeinschafts-Einstellungen bekommen Sprache getString(Context context,String key,String defaultValue)
aufgerufen und bearbeitet dann diesen Code:
@Override
protected void attachBaseContext(Context newBase) {
lang = App.Prefs.getString(newBase, App.Prefs.LANGUAGE_KEY,"fa");
super.attachBaseContext(MyContextWrapper.wrap(newBase,lang));
}
Es scheint gut, aber als ich meine App lief, sah ich eine seltsame Szene. Beim ersten Start war die App-Sprache fa (Persisch) und beim nächsten Mal wurde sie automatisch in en (Englisch) geändert!
[Anmerkung: Gerätesprache ist zur Zeit Englisch]
Hier ist meine MainActivity:
(I kommentierte Codes, die nicht zu meinem Problem in Zusammenhang stehen)
public class MainActivity extends AppCompatActivity {
EditText userText;
Button embellishBtn;
ImageView settings;
String lang;
@Override
protected void attachBaseContext(Context newBase) {
lang = App.Prefs.getString(newBase, App.Prefs.LANGUAGE_KEY,"fa");
super.attachBaseContext(App.wrap(newBase,lang));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
userText = (EditText) findViewById(R.id.textBox);
embellishBtn = (Button) findViewById(R.id.embellishButton);
settings = (ImageView) findViewById(R.id.settings);
App.SetFont.EditText(userText,this);
App.SetFont.Button(embellishBtn,this);
settings.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(getBaseContext(),getString(R.string.settings),Toast.LENGTH_SHORT).show();
return true;
}
});
MarginActivity.isFirstRateMessage = true;
Boolean isFirstOpen = App.Prefs.getBoolean(this, App.Prefs.FIRST_OPEN_KEY,true);
if (isFirstOpen && TimeZone.getDefault().getDisplayName().toLowerCase().equals("iran standard time"))
{
App.Prefs.setString(this, App.Prefs.LANGUAGE_KEY,"fa");
App.Prefs.setBoolean(this,App.Prefs.FIRST_OPEN_KEY,false);
startActivity(new Intent(this, MainActivity.class));
finish();
}
*/
}
/*
public void onSettingsClick(View view)
{
startActivity(new Intent(this, SettingsActivity.class));
}
public void onEmbellishClick(View view)
{
if(userText.getText().toString().trim().length() > 0)
{
Intent intent = new Intent(this,EmbellishActivity.class);
intent.putExtra("user_text",userText.getText().toString() + " ");
startActivity(intent);
}
else
{
Animation shake = AnimationUtils.loadAnimation(this,R.anim.focus_zoom);
userText.startAnimation(shake);
}
userText.setText(null);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("user_text",userText.getText().toString());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
userText.setText(savedInstanceState.getString("user_text"));
}
*/
}
Und getString-Methode (App.Prefs.getString()
):
static String getString(Context context,String key,String defaultValue)
{
SharedPreferences shared = context.getSharedPreferences("Prefs", MODE_PRIVATE);
return shared.getString(key, defaultValue);
}
läuft Meine Anwendung ohne Fehler. Was sollte ich tun, um dieses Problem zu lösen? Was ist los mit dir?
Bitte folgenden Link überprüfen: https://stackoverflow.com/questions/40221711/android-context-getresources-updateconfiguration-deprecated/40704077#40704077 – nomag
@nomag [LocaleHelper.java] (https: //gist.github. com/muhammad-naderi/0ff264e6cc07df904bc88a9f7efbe57d) ist eigentlich gleich mit [Diesem] (https://stackoverflow.com/questions/40221711/android-context-getresources-updateconfiguration-deprecated/40704077#40704077). –