如何仅在纵向模式下设置整个应用程序?

nar*_*esh 198 android

如何设置它以便应用程序仅以纵向模式运行?我希望在应用程序运行时禁用横向模式.我该如何以编程方式执行此操作?

Vin*_*rat 291

对于任何Android版本

来自XML

您可以android:screenOrientation="portrait"为manifest.xml文件中的每个活动指定.您无法在application标记上指定此选项.

来自Java

其他选项是以编程方式执行,例如在Activity基类中:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Run Code Online (Sandbox Code Playgroud)

适用于Android 4+(API 14+)

最后一个选项是使用自Android 4.0(API 14+)起可用的活动生命周期监听器.一切都发生在自定义Application类中:

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

ActivityLifecycleAdapter只是一个你需要创建的辅助类,它将是一个空的实现ActivityLifecycleCallbacks(因此当你只需要其中一个时,你不必覆盖该接口的每个方法).

  • 使用LifeCycleCallbacks方法,当您将设备保持在(通常是什么样的)横向模式时,您将会延迟活动启动.我想这是因为设备在活动之间短暂地返回横向模式,需要时间来处理这个问题.在清单中设置方向不具有此效果. (7认同)
  • -1:提问者特意请求//以编程方式//以及整个应用程序(这使我相信他们不想单独为每个活动执行此操作). (2认同)

Jan*_*sen 139

是的,您可以通过编程方式执行此操作,也可以为您的所有活动创建所有活动扩展的AbstractActivity.

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}
Run Code Online (Sandbox Code Playgroud)

此抽象活动也可用于全局菜单.

  • 注意:我认为`ActivityInfo.SCREEN_ORIENTATION_NOSENSOR`应该是更好的答案,因为它旨在使设备保持默认状态,因为某些设备没有纵向方向.然而,'nosensor'不适合我,所以@ arcone的答案代表我. (2认同)

Gra*_*and 97

您可以为整个应用程序执行此操作,无需使所有活动扩展为公共基类.

首先要确保Application在项目中包含子类.在onCreate()您的应用首次启动时调用它,您注册一个ActivityLifecycleCallbacks对象(API级别14+)以接收活动生命周期事件的通知.

这使您有机会在应用程序中的任何活动开始(或停止,恢复或其他)时执行您自己的代码.此时,您可以调用setRequestedOrientation()新创建的活动.

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是解决问题的唯一答案.一条线来统治它们. (8认同)
  • 并且永远不要忘记添加清单应用程序根目录.机器人:名字="MyApp的" (3认同)
  • 问题是当您水平握住设备并开始新活动时,它以横向显示,然后旋转为纵向。看起来以纵向锁定完整应用程序的唯一好方法是在 Manifest 中标记每个活动。 (3认同)
  • *一堂课来统治他们。 (2认同)
  • 此方法将活动的onCreate()调用两次. (2认同)

SRa*_*Ram 42

您可以在清单文件中设置它.

android:name=".your launching activity name"
android:screenOrientation="portrait"
Run Code Online (Sandbox Code Playgroud)

您也可以通过在类文件中编写代码来实现相同目的:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)


Nik*_*tel 24

将android:screenOrientation ="portrait"添加到AndroidManifest.xml中的活动.例如:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
Run Code Online (Sandbox Code Playgroud)

  • 他说APPLICATION不活动. (23认同)

Dee*_*rma 10

Use:

android:screenOrientation="portrait" 
Run Code Online (Sandbox Code Playgroud)

Just write this line in your application's manifest file in each activity which you want to show in portrait mode only.


Zwi*_*bel 8

将此内容写入您的清单文件,以用于每项活动:

android:screenOrientation="portrait" 
Run Code Online (Sandbox Code Playgroud)