我试图实现一个多语言的应用程序一切正常工作我有2个活动第一个是welocome活动第二个是选择语言activity但当我改变语言并按下goBack按钮欢迎活动的langauge不改变这里是我的代码:欢迎活动
public class GetStartedActivity extends AppCompat {
private Button getStartedBtn;
private Bundle b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_started);
init();
getStartedBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(GetStartedActivity.this,ChooseLanguageActivity.class));
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
}
});
}
private void init()
{
getStartedBtn = findViewById(R.id.get_started_btn);
}
}
选择语言活动:
public class ChooseLanguageActivity extends AppCompat {
private RadioButton radioButton1;
private RadioButton radioButton2;
private RadioButton radioButton3;
private RadioGroup radioGroup;
private Button nextBtn;
private String selectedLang;
private SharedPreferences sharedPreferences;
private LanguageManager languageManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_language);
init();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.enRBtn) {
radioButton1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uk, 0, R.drawable.checkmark, 0);
radioButton2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fr, 0, 0, 0);
radioButton3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.dz, 0, 0, 0);
selectedLang="en";
languageManager.setLang(selectedLang);
} else if (checkedId == R.id.frRBtn) {
radioButton1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uk, 0, 0, 0);
radioButton2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fr, 0, R.drawable.checkmark, 0);
radioButton3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.dz, 0, 0, 0);
selectedLang="fr";
languageManager.setLang(selectedLang);
} else if (checkedId == R.id.arRBtn) {
radioButton1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uk, 0, 0, 0);
radioButton2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fr, 0, 0, 0);
radioButton3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.dz, 0, R.drawable.checkmark, 0);
selectedLang="ar";
languageManager.setLang(selectedLang);
}
}
});
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
languageManager.setLang(selectedLang);
startActivity(new Intent(ChooseLanguageActivity.this,SignInActivity.class));
}
});
}
private void init()
{
radioGroup = findViewById(R.id.languageRadioGroup);
radioButton1 = findViewById(R.id.enRBtn);
radioButton2 = findViewById(R.id.frRBtn);
radioButton3 = findViewById(R.id.arRBtn);
nextBtn = findViewById(R.id.lNextBtn);
languageManager = new LanguageManager(this);
selectedLang=languageManager.getLang();
if(selectedLang.equals("en"))
{
radioButton1.setChecked(true);
radioButton1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uk, 0, R.drawable.checkmark, 0);
radioButton2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fr, 0, 0, 0);
radioButton3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.dz, 0, 0, 0);
} else if (selectedLang.equals("fr"))
{
radioButton2.setChecked(true);
radioButton1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uk, 0, 0, 0);
radioButton2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fr, 0, R.drawable.checkmark, 0);
radioButton3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.dz, 0, 0, 0);
}else
{
radioButton3.setChecked(true);
radioButton1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uk, 0, 0, 0);
radioButton2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fr, 0, 0, 0);
radioButton3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.dz, 0, R.drawable.checkmark, 0);
}
}
}
语言管理器类:
public class LanguageManager {
private Context ctx;
private SharedPreferences sharedPreferences;
public LanguageManager(Context ctx) {
this.ctx = ctx;
sharedPreferences=ctx.getSharedPreferences("LANG",Context.MODE_PRIVATE);
}
public void updateLang(String code)
{
Locale locale = new Locale(code);
Locale.setDefault(locale);
Resources resources = ctx.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale=locale;
resources.updateConfiguration(configuration,resources.getDisplayMetrics());
setLang(code);
}
public String getLang()
{
return sharedPreferences.getString("lang","en");
}
public void setLang(String code)
{
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("lang",code);
editor.commit();
}
}
AppCompat类:
public class AppCompat extends AppCompatActivity
{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LanguageManager languageManager = new LanguageManager(this);
languageManager.updateLang(languageManager.getLang());
}
}
1条答案
按热度按时间xxslljrj1#
尝试AppCompat的以下代码,它只覆盖onResume()