android应用程序中的屏幕方向设置

android应用程序中的屏幕方向设置,android,screen-orientation,Android,Screen Orientation,我想在我的应用程序中创建方向设置(“纵向”、“横向”、“自动”) 我在设置活动中创建了此选项,但我不知道如何在运行时以编程方式将此方向设置设置到我的应用程序(或活动) 在我的onCreate()活动中,我尝试了: sharedPrefSettings = PreferenceManager.getDefaultSharedPreferences(this); switch (sharedPrefSettings.getString(SettingsActivity.KEY_PR

我想在我的应用程序中创建方向设置(“
纵向
”、“
横向
”、“
自动
”)

我在设置活动中创建了此选项,但我不知道如何在运行时以编程方式将此方向设置设置到我的应用程序(或活动)

在我的
onCreate()
活动中,我尝试了:

    sharedPrefSettings = PreferenceManager.getDefaultSharedPreferences(this);

    switch (sharedPrefSettings.getString(SettingsActivity.KEY_PREF_SCREEN_ORIENTATION, "0")) {
        case "0":
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

            break;
        case "1":
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            break;
        case "2":
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

            break;
    }
但这不利于工作:

设置更改时,“活动”不会立即旋转(我必须重新创建“活动”才能应用更改)

第一次打开应用程序时,“活动”处于默认(系统)方向,大约在第二秒钟后,它将根据“我的设置”中的方向重新创建。

来自
设置请求方向的

公共无效设置requestedOrientation(int requestedOrientation)

更改此活动的所需方向。 如果活动当前处于前台或其他影响 屏幕方向,屏幕将立即改变 (可能导致活动重新启动)。否则,这将 在下次活动可见时使用

所以它应该像你描述的那样工作,我只是测试了它,没有遇到任何问题或错误。这个错误一定在别的地方


错误也可能出现在以下位置:

switch (sharedPrefSettings.getString(SettingsActivity.KEY_PREF_SCREEN_ORIENTATION, "0")) {
    case "0":
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

        break;
    case "1":
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        break;
    case "2":
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        break;
}
您正在使用开关打开
字符串
。直到最近,Android还不支持这一点。您必须确保语言级别设置为1.7,或者可以使用
整数
或if语句:

switch (sharedPrefSettings.getInt(SettingsActivity.KEY_PREF_SCREEN_ORIENTATION, -1)) {

    case 1:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;

    case 2:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        break;

    default:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        break;
}
您还可以像我刚才那样使用
default
,创建更安全、更通用的逻辑


错误也可能出现在以下位置:

sharedPrefSettings = PreferenceManager.getDefaultSharedPreferences(this);
getDefaultSharedReferences()
具有潜在的危险性,您应该避免使用此选项,而是显式创建
SharedReferences

sharedPrefSettings = getSharedPreferences("settings", MODE_PRIVATE);
sharedPrefSettings = getSharedPreferences("settings", MODE_PRIVATE);

switch (sharedPrefSettings.getInt(SettingsActivity.KEY_PREF_SCREEN_ORIENTATION, -1)) {

    case 1:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;

    case 2:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        break;

    default:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        break;
}

因此,当所有错误都修复后,您的代码应该如下所示:

sharedPrefSettings = getSharedPreferences("settings", MODE_PRIVATE);
sharedPrefSettings = getSharedPreferences("settings", MODE_PRIVATE);

switch (sharedPrefSettings.getInt(SettingsActivity.KEY_PREF_SCREEN_ORIENTATION, -1)) {

    case 1:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;

    case 2:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        break;

    default:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        break;
}

到底是什么不起作用?看看这个:Xaver Kapeller,我更新了答案。仅供参考:我使用语言级别1.7,所以我可以使用带字符串的开关。