在Android中禁用横向模式?

时间:2009-02-24 15:29:25

标签: android orientation android-manifest

如何在Android应用中为某些视图禁用横向模式?

33 个答案:

答案 0 :(得分:1521)

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

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />
编辑:由于这已成为一个非常受欢迎的答案,我感到非常内疚,因为强迫肖像很少是解决它经常应用的问题的正确方法。
强迫肖像的主要警告:

  • 这并不能免除你不得不考虑活动 生命周期事件或正确保存/恢复状态。有很多 除了可以触发活动的app旋转之外的东西 破坏/娱乐,包括不可避免的事情,如多任务处理。没有捷径;学习使用bundle和retainInstance片段。
  • 请记住,与相当统一的iPhone体验不同,有许多设备,其中肖像不是明显流行的方向。当用户使用带有硬件键盘或游戏手柄的设备(包括Droid 1-4,Xperia Play或Nvidia Shield)时,强制纵向可能会使您的应用程序成为一个巨大的可用性麻烦(特别是在盾牌上)。如果您的应用程序没有非常具体的用例,这会导致支持其他方向的直接负面体验,那么您可能不应该强迫横向。我说的是“这是一款遥控器应用程序,用于仅在设备的一侧有IR发射器的手机”,或“这是一个收银机应用程序,适用于固定使用的一种特定型号的平板电脑硬件码头。“

因此,大多数应用应该让手机传感器,软件和物理配置自行决定用户如何与您的应用进行互动。但是,如果您对用例中sensor方向的默认行为不满意,可能仍需要考虑一些案例:

  • 如果您的主要关注点是意外方向更改,您认为设备的传感器和软件无法很好地处理(例如,在基于倾斜的游戏中),请考虑支持横向和纵向,但使用{{1对于方向。大多数手机上的大多数平板电脑和人像都有这种风景,但我仍然不建议大多数“普通”应用程序(有些用户喜欢在手机上键入横向软键盘,许多平板电脑用户都是纵向阅读 - 和你应该让他们)。
  • 如果仍然因某种原因需要强制观看,nosensor可能比Android {3}更好sensorPortrait;这允许颠倒的肖像,这在平板电脑的使用中很常见。

答案 1 :(得分:102)

在阅读此帖之前,我不知道AndroidManifest.xml文件切换,所以在我的应用中我使用了这个:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation

答案 2 :(得分:39)

在您宣传活动的清单文件中添加此android:screenOrientation="portrait"

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

如果你想使用java代码试试

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

setContentView之前为您的活动调用onCreate()方法。

希望对所有人有所帮助并且容易理解......

答案 3 :(得分:25)

这里的很多答案都建议在AndroidManifest.xml文件中使用"portrait"。这看起来似乎是一个很好的解决方案 - 但正如文档中所述,您正在挑选出可能只有景观的设备。您还强制某些设备(在横向上效果最佳)进入人像,而不是正确的方向。

我的建议是使用"nosensor"代替。这将使设备使用其默认首选方向,不会阻止在Google Play上进行任何购买/下载,并确保传感器不会弄乱您的(NDK,在我的情况下)游戏。

答案 4 :(得分:11)

如果您想要用户设置,

然后我建议setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

您可以从设置菜单更改设置。

我需要这个,因为我的计时器必须与屏幕上的内容相对应,旋转屏幕会破坏当前的活动。

答案 5 :(得分:9)

只需在你的清单中添加Like this Line

  

android:screenOrientation =“portrait”

<manifest
    package="com.example.speedtestmeter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

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

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

    </application>

</manifest>   

答案 6 :(得分:7)

在活动的onCreate()中使用它

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

答案 7 :(得分:6)

如果您不想更好地处理在每个清单活动条目中添加方向的麻烦,请创建一个BaseActivity类(继承'Activity'或'AppCompatActivity'),它将由应用程序的每个活动继承而不是'Activity'或'AppCompatActivity',只需在BaseActivity中添加以下代码:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}

答案 8 :(得分:6)

您应该在AndroidManifest.xml中更改android:screenOrientation="sensorPortait"

答案 9 :(得分:6)

只需在您的活动代码中添加此属性即可。

 android:screenOrientation="portrait"

答案 10 :(得分:5)

如果您要停用 Landscape mode for your android app (或单个活动),您需要做的就是添加,

android:screenOrientation="portrait" AndroidManifest.xml 文件中的活动代码。

像:

<activity android:name="YourActivityName" 
    android:icon="@drawable/ic_launcher" 
    android:label="Your App Name" 
    android:screenOrientation="portrait">

另一种方式,程序化方法。

如果你想以编程方式这样做,即。使用Java代码。您可以通过在不希望以横向模式显示的活动的Java类中添加以下代码来执行此操作。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

我希望对您有所帮助。有关详细信息,请访问enter link description here

答案 11 :(得分:5)

android:screenOrientation="portrait"添加到要禁用横向模式的活动。

答案 12 :(得分:5)

在您的清单文件中添加以下代码段。

<activity android:name=".yourActivity"
          ....
          android:screenOrientation="portrait"/>

此支持仅限肖像模式

答案 13 :(得分:4)

您必须设置每项活动的方向。

<activity
                android:name="com.example.SplashScreen2"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Registration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Verification"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.WelcomeAlmostDone"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.PasswordRegistration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>

答案 14 :(得分:4)

使用

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" 

答案 15 :(得分:4)

在oncreate()方法中添加类

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

答案 16 :(得分:4)

如果您使用 Xamarin C#,其中一些解决方案将无效。这是我发现的解决方案。

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

在课程上方运作良好,与其他解决方案类似,也不是全局适用的,需要放在每个活动标题中。

答案 17 :(得分:4)

如何在某些视图中更改方向

您可以使用此类动态锁定任何视图的方向,而不是锁定整个活动的方向: -

制作视图 风景

OrientationUtils.lockOrientationLandscape(mActivity);

制作视图 人像

OrientationUtils.lockOrientationPortrait(mActivity);

解锁 方向

OrientationUtils.unlockOrientation(mActivity);

Orientation Util Class

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;

/*  * This class is used to lock orientation of android app in nay android devices 
 */

public class OrientationUtils {
    private OrientationUtils() {
    }

    /** Locks the device window in landscape mode. */
    public static void lockOrientationLandscape(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    /** Locks the device window in portrait mode. */
    public static void lockOrientationPortrait(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    /** Locks the device window in actual screen mode. */
    public static void lockOrientation(Activity activity) {
        final int orientation = activity.getResources().getConfiguration().orientation;
        final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                .getRotation();

        // Copied from Android docs, since we don't have these values in Froyo
        // 2.2
        int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
        int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

        // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
        if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
            SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
        }

        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
        } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
        }
    }

    /** Unlocks the device window in user defined screen mode. */
    public static void unlockOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }

}

答案 18 :(得分:4)

您可以通过将此文件写入manifest.xml

来强制您的特定活动始终保持纵向模式
 <activity android:name=".MainActivity"
        android:screenOrientation="portrait"></activity>

您还可以通过在活动的onCreate()方法中写下以下行来强制您的活动保持在postrait模式

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

答案 19 :(得分:4)

简单地添加  android:screenOrientation="portrait" 到应用程序清单中的activity标记。

例如:

 <activity android:name=".ui.activities.MainActivity"
  android:screenOrientation="portrait"></activity>

答案 20 :(得分:4)

您应将此代码放入清单文件.......

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

答案 21 :(得分:3)

<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity android:name=".MyActivity" 
                android:screenOrientation="portrait" 
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>

答案 22 :(得分:3)

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

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

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

不要忘记添加app:name =&#34; .MyApp&#34;在您的清单文件中。

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

答案 23 :(得分:2)

在您的项目中添加以下建议,

  

npm安装

     

npm我反应本机定向储物柜

然后您使用清单类, React_Native(您的项目文件夹)/ android / app / src / main / AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:allowBackup="false"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

谢谢!

答案 24 :(得分:2)

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.co.nurture.bajajfinserv">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我们可以使用属性或android:screenOrientation限制纵向或横向模式下的活动。

如果我的程序中有多个活动,那么您可以自由地限制任何一种模式中的任何活动,并且它永远不会影响您不想要的其他活动。

答案 25 :(得分:2)

<apphome>/platform/android目录中创建AndroidManifest.xml(从生成的目录中复制它)。 然后将android:screenOrientation=portrait”添加到所有活动元素。

答案 26 :(得分:2)

将其放入清单中。

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="sensorPortrait" />

方向将为纵向,但如果用户的手机倒置,则也将显示正确的方式。 (这样您的屏幕就会旋转180度)。


如果活动在以下位置运行,系统忽略该属性 多窗口模式

答案 27 :(得分:2)

AndroidManifest.xml 文件中添加android:screenOrientation="portrait"

例如:

<activity android:name=".MapScreen" 
 android:screenOrientation="portrait"></activity>

答案 28 :(得分:1)

在kotlin中,可以使用以下

以编程方式实现
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

答案 29 :(得分:1)

它适用于我,尝试在AndroidManifest文件中添加此代码

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme">
        ....
        ....
        </application>

答案 30 :(得分:0)

如果要对特定活动应用模式,请在清单android:screenOrientation="portrait"中添加此名称,并在所需的活动标签中进行定义。或在整个应用的应用标签中定义。喜欢

<application
....
android:screenOrientation="portrait"
</application>

答案 31 :(得分:0)

如果您的活动与第一个设备方向状态相关,请使用onCreate方法获取当前设备方向,然后永久修复:

        int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();

        if(deviceRotation == Surface.ROTATION_0) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_180)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_90)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(deviceRotation == Surface.ROTATION_270)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        }

答案 32 :(得分:0)

为了帮助其他人,AndroidManifest.xml中ACTIVITY的以下属性就是您所需要的:

机器人:configChanges = “取向”

所以,完整活动节点:

<activity android:name="Activity1" 
    android:icon="@drawable/icon" 
    android:label="App Name" 
    android:configChanges="orientation">