【发布时间】:2020-05-12 12:49:33
【问题描述】:
我想通过选定的微调器更改我的应用程序的语言,但第一次不要更改。经过两次选择,它工作。我强制使用 setOnTouchListener 因为没有它会发生循环。它工作但经过多次选择。
这是我的代码:
boolean spinnerTouch=false;
Spinner s1;
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (spinnerTouch) {
String text = parent.getItemAtPosition(position).toString();
if (text.equals(getString(R.string.persian))) {
lang = getResources().getString(R.string.lang_fa);
country = getResources().getString(R.string.country_ir);
onConfigurationChanged(new Configuration());
} else if (text.equals(getString(R.string.english))) {
lang = getResources().getString(R.string.lang_en);
country = getResources().getString(R.string.country_us);
onConfigurationChanged(new Configuration());
}
Utility.setPreferences(this, getResources().getString(R.string.lang), lang);
Utility.setPreferences(this, getResources().getString(R.string.country), country);
spinnerTouch = false;
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnLogin=(Button)findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(this);
s1 = (Spinner) findViewById(R.id.spnLang);
s1.setOnItemSelectedListener(this);
s1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
spinnerTouch= true;
return false;
}
});
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
if (lang != null){
Utility.languageHelper(lang,country,newConfig,getBaseContext().getResources());
recreate();
}
}
public class Utility {
public static void languageHelper(String lang, String country, Configuration config, Resources resources) {
Locale locale = new Locale(lang,country);
config.locale = locale;
Locale.setDefault(locale);
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
【问题讨论】:
-
在微调器中选择语言后尝试重新启动您的应用
-
但重启应用前不要更改配置
-
你从哪里打电话给
languageHelper和recreate()? -
希望这个对你有所帮助:stackoverflow.com/questions/59854390/…
-
@Md.Asaduzzaman 非常感谢。确实解决了。
标签: android spinner onitemselectedlistener