【问题标题】:Set screen orientation for the whole app为整个应用设置屏幕方向
【发布时间】:2014-03-31 05:52:18
【问题描述】:

我正在实现一种用户可以从应用设置中禁用屏幕旋转的方法。如果选中该框,则任何Activity 都可以自动旋转并遵循手机旋转设置。如果未选中,则禁用自动旋转。

我知道如何按照Activity 这样做

if(!GlobalVar.sharedPreferences_static.isAutoRotate()){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}else{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}

有没有一种方法可以为所有活动(整个应用程序)执行一次,而不是为每个Activity 执行一次?谢谢。

【问题讨论】:

  • 我认为,没有办法通过一个活动来完成。您需要在每个活动中添加代码。
  • 但是您不能为整个应用程序设置方向,您可以设置单个活动...只有当您想为您设置的特定活动设置方向时,如下面我的回答...

标签: java android android-activity screen-orientation


【解决方案1】:

如果我正确理解了您的问题,您可以执行以下操作:创建一个空的 Activity(不设置其内容),如下所示:

public class EmptyActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Your screen orientation logic here
    }
}

然后你让所有其他Activities 扩展EmptyActivity。因此,您只需要实现一次屏幕方向逻辑即可。

【讨论】:

  • 这是一个很好的解决方案。唯一的问题是我有异步任务,一旦活动开始就执行加载活动。将上面的代码放在 asyc 任务期间会导致屏幕方向!
【解决方案2】:

同样的事情可以在清单中完成:

android:screenOrientation="landscape"

但如果(仅)应用于应用程序标签,则该属性不起作用。您仍然需要在每个活动中使用它,但至少在语法上更容易。

【讨论】:

  • 应用程序标签不支持AFAIK screenOrientation
  • 正确。我刚刚测试将它放在应用程序标签上。它没有抱怨,但也没有真正起作用。
【解决方案3】:

您只需像这样将这一行添加到您的活动中

            <activity
                android:name="Package name"
                android:label="App anem"
                android:screenOrientation="landscape" //Orientation 
               >
            </activity>

或者您可以在活动开始时像这样以编程方式设置...

if (Config.sDeviceType.equalsIgnoreCase("MO")) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多