gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:45:28 24 4
gpt4 key购买 nike

我想在我的应用程序中创建方向设置(“Portrait”、“Landscape”、“Auto”)。

我在我的设置 Activity 中创建了这个选项,但我不知道如何在运行时以编程方式为我的应用程序(或 Activity )设置这个方向设置。

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

    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;
}

但是效果不好:

设置更改后 Activity 不会立即旋转(我必须重新创建 Activity 才能应用更改)

首次打开应用程序时, Activity 处于默认(系统)方向,大约一秒钟后,它会根据我的设置重新创建方向。

最佳答案

来自documentation setRequestedOrientation:

public void setRequestedOrientation (int requestedOrientation)

Change the desired orientation of this activity. If the activity is currently in the foreground or otherwise impacting the screen orientation, the screen will immediately be changed (possibly causing the activity to be restarted). Otherwise, this will be used the next time the activity is visible.

所以它应该像您描述的那样工作,我刚刚对其进行了测试,没有遇到任何问题或错误。错误必须在其他地方。


错误也可能在这里:

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;
}

您正在 String 上使用 switch。直到最近,Android 才支持这一点。您必须确保您的语言级别设置为 1.7,或者您可以使用 Integers 或 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);

getDefaultSharedPreferences() 有潜在的危险,您应该避免使用它,而是像这样显式地创建您的 SharedPreferences:

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;
}

关于android - Android应用程序中的屏幕方向设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com