Java 我可以通过点击按钮来本地化我的整个android应用程序吗

Java 我可以通过点击按钮来本地化我的整个android应用程序吗,java,android,Java,Android,我必须为英语和阿拉伯语用户本地化一个android项目。 从下一个链接中,我得到了执行此任务的代码 My activity_main.xml包含两个按钮英语按钮,用于为英语用户更改我的应用程序文本, 和阿拉伯语按钮,用于为阿拉伯语用户更改我的应用程序文本 在我的activity_main.xml上,有一些按钮的文本,在按下英语或阿拉伯语按钮后,这些按钮会从该语言转换为另一种语言 我的问题在这里 如何在其他活动中转换按钮的文本? 如果我试图通过updateTexts()方法更新它们,我将得到错误

我必须为英语和阿拉伯语用户本地化一个android项目。 从下一个链接中,我得到了执行此任务的代码

My activity_main.xml包含两个按钮英语按钮,用于为英语用户更改我的应用程序文本, 和阿拉伯语按钮,用于为阿拉伯语用户更改我的应用程序文本

在我的activity_main.xml上,有一些按钮的文本,在按下英语或阿拉伯语按钮后,这些按钮会从该语言转换为另一种语言

我的问题在这里

如何在其他活动中转换按钮的文本? 如果我试图通过updateTexts()方法更新它们,我将得到错误:- 不幸的是,应用程序已停止(因为他们的活动未启动)

MainActivity.java

public class MainActivity extends Activity
    {
    private Button English,Arabic;  
    private Locale myLocale;
    public void changeLang(String lang)
    {
    if (lang.equalsIgnoreCase(""))
    return;
    myLocale = new Locale(lang);
    saveLocale(lang);
    Locale.setDefault(myLocale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = myLocale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    updateTexts();
    }

public void saveLocale(String lang)
{
    String langPref = "Language";
    SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(langPref, lang);
    editor.commit();
}

public void loadLocale()
{
    String langPref = "Language";
    SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
    String language = prefs.getString(langPref, "");
    changeLang(language);
}

private void updateTexts()
{

 English.setText(R.string.English);
 Arabic.setText(R.string.Arabic);

}
 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.English= (Button)findViewById(R.id.English);
    this.Arabic = (Button)findViewById(R.id.Arabic);

 Button  english = (Button) findViewById(R.id.English);
 english.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
  String lang = "en";
 switch (v.getId()) {
 case R.id.English:
 lang = "en";
 break;
 case R.id.Arabic:
 lang = "ar";
 break;
 default:
 break;  
 }
 changeLang(lang);
 }
 });
 Button  Arabic= (Button) findViewById(R.id.Arabic);
 english.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
 String lang = "ar";
 switch (v.getId()) {
 case R.id.English:
lang = "en";
break;
case R.id.Arabic:
lang = "ar";
break;
default:
break;  
}
changeLang(lang);
}  
});
}}
请尝试以下代码:

Locale locale = new Locale("en_US"); 
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getApplicationContext().getResources().updateConfiguration(config, null);
在SharedReferences中保存区域设置:

/*
  SETTINGS_NAME - string variable or constant
  LANG_SETTINGS - lang settings identificator
  lang - language, en_US for example 
 */
SharedPreferences preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor = editor.putString(LANG_SETTINGS, lang);
editor.commit();
SharedPreferences preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
String lang = preferences.getString(LANG_SETTING, "")
加载共享引用:

/*
  SETTINGS_NAME - string variable or constant
  LANG_SETTINGS - lang settings identificator
  lang - language, en_US for example 
 */
SharedPreferences preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor = editor.putString(LANG_SETTINGS, lang);
editor.commit();
SharedPreferences preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
String lang = preferences.getString(LANG_SETTING, "")

我已经找到了解决我问题的办法。 不需要updateTexts()方法或“已更改的文本”。
只需使用上面的“我的代码”单击相应的按钮,文本就会自动更改

按钮的文本也可以从为locale.getApplicationContext().getResources().updateConfiguration(config,null)配置的string.xml中获取;此代码不起作用,可能是如果我使用上下文它会起作用,但我如何使用上下文。如果我尝试新建MainActivity().getApplicationContext().getResources().updateConfiguration(配置,null),则您的活动为context;应用程序已停止您是否在活动中使用此方法?您是否使用了正确的语言代码?