4

ユーザーが言語を変更できるアプリがあります。

MainActivity.onCreate() に次のコードを追加するだけで、すべてが正常に機能しています。

String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("languagePref", "default");
    Configuration config = getResources().getConfiguration();
    if( lang.equals("default") ) lang = Locale.getDefault().getLanguage();
    config.locale = new Locale(lang);
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());

アプリを再起動したり、アクティビティをナビゲートしたりしても、正しい言語のままです。

唯一の問題は、PreferenceActivity 画面にあります。向きが変わると、PreferenceActivity のタイトル (およびそれのみ) が既定のデバイス言語に変更されます。

前に戻っても (PreferenceActivity を閉じると)、設定は正しくチェックされますが、アプリは正しい言語のままですが、アプリを再起動するまで PreferenceActivity は間違ったままです。

上記のコードを PreferenceActivity.onCreate() に強制しようとしましたが、デバッグは問題ないように見えますが、PrefenceActivity のタイトルは間違ったままです。

これが私のPrefenceActivityコードです:

public class PreferencesActivity extends PreferenceActivity {

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

この動作は、他のアクティビティでは発生しません:/

画面の向きをロックすることはできません。

何かご意見は?

ありがとう。

4

4 に答える 4

3

OK、これで修正されました。

@Override
protected void onSaveInstanceState(Bundle outState) {
    String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("languagePref", "default");
    Configuration config = getResources().getConfiguration();
    if( lang.equals("default") ) lang = Locale.getDefault().getLanguage();
    config.locale = new Locale(lang);
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());
    super.onSaveInstanceState(outState);
}
于 2013-11-18T20:38:32.883 に答える
-1

を使用して、画面の向きをアクティビティにロックできます

android:screenOrientation="portrait"

また

android:screenOrientation="landscape"
于 2013-11-12T03:43:31.107 に答える