如何将Android App的方向锁定为手机中的人像和平板电脑中的风景?


82

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


2
@CommonsWare:我的应用程序具有包含很长列表的菜单,这些菜单在手机的potrait模式下更有效地遍历。
Ankit Rawat

3
然后提出一种更好的GUI设计,该设计尊重用户在任何方向上使用其设备的能力。
CommonsWare 2013年

Answers:


155

您只需在文件的activity元素内定义下面的属性AndroidManifest.xml。这会将您的方向限制为纵向。

android:screenOrientation =“ portrait”

例:

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

另外,如以下爱德华·卢卡(Eduard Luca)的评论所述,screenOrientation="sensorPortrait"如果您想启用180度旋转,也可以使用。


21
或者,sensorPortrait如果您希望用户能够将屏幕旋转180度:)
Eduard Luca 2014年

44

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

此外,《 Android开发人员指南》指出:

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


6
+1是优良作法的报价,因为这应该是公认的答案,因为它是正确的并且是第一次发布...
爱德华·卢卡

7
有全球性的方法吗?
泰勒·帕夫

21

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

android:screenOrientation="portrait" 

这将迫使您的应用在手机和平​​板电脑上均为纵向显示。

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

android:screenOrientation="nosensor"

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


对于那些对设置“ nosensor”感到好奇的人,可以在developer.android.com/guide/topics/manifest/activity-element
James Jordan Taylor

11

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

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

平板电脑或手机-Android

然后......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

@Bhavesh,您好:它不适用于Android 9移动版。
Manikandan K

我们如何确定它是否为平板电脑...您没有解释...
Abdul Wahid

您可以看到编辑后的答案。我已包括如何确定设备是智能手机还是平板电脑?
Bhavesh Hirpara

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

添加到主要活动并添加

android:configChanges="keyboardHidden"

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




0

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

这里的例子

您需要输入每个活动

在活动中添加以下行

对于肖像

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>


-1

只需添加:

android:screenOrientation="portrait"

在“ AndroidManifest.xml ”中:

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.