98

我正在开发一个 Android 应用程序,当用户旋转设备时,我不想将其方向更改为横向模式。另外,我希望锁定方向在手机上为纵向模式,在平板电脑上为横向模式。这可以实现吗,如果可以,如何实现?谢谢。

4

9 回答 9

178

您只需在文件的活动元素内定义以下属性AndroidManifest.xml。它会将您的方向限制为纵向。

安卓:screenOrientation="人像"

例子:

        <activity
            android:name="com.example.demo_spinner.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

如果您希望它适用于整个应用程序,请在应用程序标记内定义以下属性,如下所示:

        <application>
         android:screenOrientation="sensorPortrait"
        </application>

另外,根据 Eduard Luca 在下面的评论,screenOrientation="sensorPortrait"如果您想启用 180 度旋转,也可以使用。

于 2013-03-30T13:11:03.687 回答
48

你必须android:screenOrientation="portrait"在你的AndroidManifest.xml. 这将在您的<activity>标签中完成。

此外,Android 开发者指南指出:

[...] 您还应该明确声明您的应用程序需要纵向或横向的元素。例如,<uses-feature android:name="android.hardware.screen.portrait" />

于 2013-03-30T13:09:28.953 回答
24

我可以看到您已经接受了一个不能完全解决您的问题的答案:

android:screenOrientation="portrait" 

这将强制您的应用在手机和平​​板电脑上都是纵向的。

您可以通过使用将应用程序强制设置为设备的“首选”方向

android:screenOrientation="nosensor"

这将导致您的应用程序在大多数手机上强制为纵向,而在平板电脑上强制为横向。有许多带有键盘的手机是为横向模式设计的。强制您的应用纵向显示可能使其在此类设备上几乎无法使用。Android 最近也在迁移到其他类型的设备。最好让设备选择首选方向。

于 2014-11-12T11:30:32.247 回答
12

可能是..您必须以编程方式识别它是平板电脑还是手机...首先检查设备是手机还是平板电脑

确定设备是智能手机还是平板电脑?

平板电脑或手机 - Android

然后......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
于 2013-03-30T13:23:14.040 回答
3
<activity android:name=".yourActivity"
          android:screenOrientation="portrait" ... />

添加到主要活动并添加

android:configChanges="keyboardHidden"

以防止您的程序在调用键盘时更改模式。

于 2013-03-30T13:13:05.760 回答
2

在活动标签下的清单文件中将屏幕方向设置为纵向。

这里的例子

您需要输入每个活动

在活动中添加以下行

肖像用

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

景观

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

这里是 MainActivity 的例子

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
 
    <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"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity android:name=".MainActivity2"
            android:screenOrientation="landscape"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

于 2020-05-09T11:12:27.693 回答
1

在活动标签下的清单文件中将屏幕方向设置为纵向。

于 2015-05-14T13:36:19.377 回答
1
android:screenOrientation="locked"

用于 实际活动<application>的所有应用程序 <activity>

于 2020-03-23T09:59:53.830 回答
-1

只需添加:

android:screenOrientation="portrait"

在“ AndroidManifest.xml ”中:

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
于 2019-12-17T12:47:00.127 回答