当语言发生变化时,如何开始另一项活动



我想用两种语言展示android应用程序,但我的应用程序并不是从用户选择的语言开始的。我的默认应用程序语言是"英语",当用户更改"语言设置"时,我想用"缅甸语"启动应用程序。我该怎么办?

据我所知,用户更改设备语言,您希望应用程序遵循该语言

这一行将为您提供设备语言,以便您的应用程序可以在支持的语言之间切换。

Locale.getDefault().getLanguage();

我不理解语言设置部分,是用户可以从应用程序本身更改应用程序语言吗?

如果否-

您可以通过Locale.getDefault().getLanguage(); 找到默认语言

如果是-

保存用户在SharedPreference中选择的语言,如果用户选择了英语显示英语内容或缅甸语。

试试这个。。。

  1. 首先编写本地共享首选项类来存储区域设置值

LocalSharedManager.java

public class LocalSharedManager {
Context context;
SharedPreferences sharedPreferences;
public LocalSharedManager(Context context) {
    this.context = context;
    sharedPreferences = context.getSharedPreferences("pref",
            Context.MODE_PRIVATE);
}
public SharedPreferences getGcmPreferences() {
    return sharedPreferences;
}
public String GetValueFromSharedPrefs(String KeyName) {
    return sharedPreferences.getString(KeyName, "");
}
public String SaveValueToSharedPrefs(String KeyName, String value) {
    Editor editor = sharedPreferences.edit();
    editor.putString(KeyName, value);
    editor.commit();
    return true;
  }
 }
  1. 你的主要活动

MainActivity.java

  public class MainActivity extends Activity 
 {
  private RadioGroup radioGroup;
  private RadioButton english;
  private RadioButton burmese;
  private LocalSharedManager mgr;
  private Configuration config;
@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mgr = new LocalSharedManager(MainActivity.this);
    
    radioGroup = (RadioGroup) findViewById(R.id.radioChoice);
    english=(RadioButton)findViewById(R.id.radioEnglish);
    burmese=(RadioButton)findViewById(R.id.radioBurmese);
    
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {
     public void onCheckedChanged(RadioGroup group, int checkedId) 
        {
         // do whatever
         if(english.isChecked())
           {
             // Do the UI changes for English.
             Toast.makeText(MainActivity.this,"English", Toast.LENGTH_SHORT).show();
             ChangeLocale();
           }
         else if(burmese.isChecked())
           {
             // Do the UI changes for Burmese.
             Toast.makeText(MainActivity.this,"Burmese", Toast.LENGTH_SHORT).show();
             ChangeLocale();
           }
      }
 });
}

/**
 * Method that use change locale type to English or Arabic.
 */
public void ChangeLocale() {
    String lang = mgr.GetValueFromSharedPrefs("App_Locale");
    if (lang.equalsIgnoreCase("")) {
        //default
        changeEnglish();
    } else {
        if (lang.equalsIgnoreCase("MY")) {
            changeBurmese();
        } else {
            changeEnglish();
        }
    }
}
public void changeBurmese() {
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            String app_locale = "my";
            Locale locale = new Locale(app_locale);
            Locale.setDefault(locale);
            config = new Configuration();
            config.locale = locale;
            getResources().updateConfiguration(config,
                    getResources().getDisplayMetrics());
                
            //save selected locale in preference        
            mgr.SaveValueToSharedPrefs("App_Locale", app_locale);
            
            //refresh activity here.
            Intent i = getActivity().getIntent();
            startActivity(i);
            getActivity().finish();
            return null;
        }
    }.execute();
}
public void changeEnglish() {
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            String app_locale = "en";
            Locale locale = new Locale(app_locale);
            Locale.setDefault(locale);
            config = new Configuration();
            config.locale = locale;
            getResources().updateConfiguration(config,
                    getResources().getDisplayMetrics());
                
            //save selected locale in preference        
            mgr.SaveValueToSharedPrefs("App_Locale", app_locale);
            
            //refresh activity here.
            Intent i = getActivity().getIntent();
            startActivity(i);
            getActivity().finish();
            return null;
        }
    }.execute();
  }
 }

最新更新