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

时间:2011-07-19 10:35:05

标签: android

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

17 个答案:

答案 0 :(得分:283)

适用于任何Android版本

来自XML

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

来自Java

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

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

适用于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);
        }
    });
}

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

答案 1 :(得分:136)

是的,您可以通过编程方式和所有活动进行所有活动扩展的AbstractActivity。

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

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

答案 2 :(得分:90)

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

首先要确保在项目中包含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);

            }

            ....

        });

    }
}

答案 3 :(得分:40)

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

android:name=".your launching activity name"
android:screenOrientation="portrait"

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

答案 4 :(得分:24)

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

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

答案 5 :(得分:10)

使用:

android:screenOrientation="portrait" 

只需在您希望仅以纵向模式显示的每项活动的应用程序清单文件中写下此行。

答案 6 :(得分:8)

将此内容写入您的清单文件,以便进行每项活动:

android:screenOrientation="portrait" 

答案 7 :(得分:2)

来自Android开发者指南:

  

&#34;取向&#34;屏幕方向已更改 - 用户已更改   旋转设备。注意:如果您的应用程序的目标是API级别13或   更高(由minSdkVersion和targetSdkVersion声明   属性),那么你也应该声明&#34; screenSize&#34;   配置,因为它也会在设备之间切换时发生变化   肖像和风景方向。

     

&#34;屏幕尺寸&#34;当前可用的屏幕大小已更改。这个   表示相对于当前可用大小的变化   当前宽高比,因此在用户切换时会发生变化   景观和肖像。但是,如果您的应用程序针对API级别   12或更低,然后您的活动始终处理此配置   改变自己(此配置更改不会重新启动您的   活动,即使在Android 3.2或更高版本的设备上运行)。添加   在API级别13。

因此,在AndroidManifest.xml文件中,我们可以输入:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

答案 8 :(得分:1)

在我的config.xml中<preference name="orientation" value="portrait" />下添加<widget>为我工作。

(其他解决方案要么在我的设备上无效,要么在构建过程中被覆盖,要么在构建过程中出现弃用错误。)

答案 9 :(得分:1)

在清单文件中您想要在“portrait”中使用哪个活动,您必须在活动代码中编写这些代码

  android:screenOrientation="portrait" 
像这样

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

但是如果你想在横向画面中使用这样的代码

android:screenOrientation="landscape"

答案 10 :(得分:1)

mv-apply

答案 11 :(得分:0)

如果有人想知道,如何在整个应用程序中执行此操作而无需使所有活动扩展到 Kotlin 中的公共基类, 见下面的例子:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

然后你必须在AndroidManifest中添加你的公共基类,如下所示:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

答案 12 :(得分:0)

你可以用两种方式做到这一点。

  1. 在您的清单文件中添加android:screenOrientation="portrait" 相应的活动
  2. 添加    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     您在`onCreate()方法
  3. 中的活动

答案 13 :(得分:0)

类似于Graham Borland的答案...但是,如果您不想...似乎不必创建Application类...只需在您的项目中创建一个Base Activity

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

并在要使用Potrait模式的地方扩展此类而不是AppCompatActivity

public class your_activity extends BaseActivity {}

答案 14 :(得分:0)

对于Xamarin用户:

如果您将所有活动扩展到BaseActivity,只需添加:

this.RequestedOrientation = ScreenOrientation.Portrait;

这将解决问题。如果您希望进行任何特定的活动,请在OnActivityCreated中进行覆盖。为:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

答案 15 :(得分:0)

嗯, 我尝试了所有答案,但在旧版本的 android 中不起作用。 因此,最终的解决方案是将此代码添加到 setContentView 上方的每个活动中:

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

答案 16 :(得分:-11)

在你的Manifest中输入:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>