Android - 方向更改时强制重置区域设置

标签 android locale orientation

我尝试将应用程序中的区域设置强制为用户指定的区域。由于这可能用于演示,我想更改应用程序中的语言/区域设置,而不是随时更改整个设备。

我环顾四周并尝试使用我在这里找到的每一个提示。结果:我可以使用新语言重新开始我的测试 Activity ,但如果我改变方向,区域设置将始终重置为设备一。

uploaded a minimalistic project所以你可以重现我的问题。请忽略 UI 的缩小,这并不重要 :)

最佳答案

此代码 fragment 可以满足您的需求,我已经对其进行了测试。假设您希望用户能够通过主 Activity 中的菜单切换语言。您可以通过将语言标志保存为用户首选项并在“onCreate()”和“onConfigurationChanged()”上进行检查,如下所示:

    public class MainActivity extends Activity {

SharedPreferences mPrefs1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);
    String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage());
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());

    setContentView(R.layout.activity_main);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
    mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);
    String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage());
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
    setContentView(R.layout.activity_main);
}

// Declaring the Menu options
@Override
public boolean onCreateOptionsMenu(Menu menu)
{       
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

//handle menu item selection
public boolean onOptionsItemSelected(MenuItem item)
{
  switch (item.getItemId()) {
    case R.id.menu_switch_language:
        String languageToLoad  = getResources().getString(R.string.switch_language);

        mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = mPrefs1.edit();
        editor.putString("languagePref", languageToLoad);
        editor.commit(); // Very important to save the preference                      
        finish();
        startActivity(getIntent());
        return true;
    default:
        return super.onOptionsItemSelected(item);
  }
}   

}

关于Android - 方向更改时强制重置区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2324418/

相关文章:

objective-c - 导航 Controller 中的方向变化

html - Google Directions API——获取没有 HTML 标记的 XML 响应

java - retrofit / Dagger - Android : Fatal Exception: API declarations must be interfaces

android - Android中的YouTube横向模式

android - 如何在安卓模拟器中为印度地方语言设置自定义语言环境

javascript - 画廊中的图像在方向改变时消失

java - 基于图 block 的 map 滚动

java - 将操作系统的自定义区域设置应用到 Java

r - 在 R 中更改然后不更改语言环境的可靠方法是什么?

ios - 始终锁定 iPhone 应用程序方向