在AndroidManifest中:期望android:screenOrientation="unspecified"

77

Android Studio 3.6。

我希望我的应用程序始终处于竖屏模式。因此在我的AndroidMainfest.xml文件中:

<activity
   android:name=".activity.SplashActivity"
   android:screenOrientation="portrait">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />

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

我运行这个应用程序,SplashActivity竖屏 模式下显示。很好。 但是编辑器显示以下错误:

Expecting android:screenOrientation="unspecified"

为什么?

10个回答

133

在您的清单标签中(就在xmlns:android="http://schemas.android.com/apk/res/android"下面),输入

xmlns:tools="http://schemas.android.com/tools"

然后在应用程序标签内放置

tools:ignore="LockedOrientationActivity"

10
如果您已经在应用程序标签中使用了tools:ignore,则将其设置为tools:ignore="GoogleAppIndexingWarning,LockedOrientationActivity"。请注意,翻译过程中不会提供解释或其他信息。 - Mystery

25

仅影响Android Studio 3.6以上版本

问题是什么? 此问题是由于Android框架希望用户自行控制应用程序方向,不建议限制应用程序方向。例如,如果用户想在横向方向使用应用程序,他只需翻转设备,传感器会完成工作,但是当开发人员限制屏幕方向时,即使旋转传感器工作,应用程序也将保持预定义状态,以某种方式限制了用户设备的功能。

现在怎么办? 您有两个选择, 第一种选择是忽略错误,因为它不会导致任何构建失败,我正在做同样的操作,apk / aab生成正常进行。 另一个选择是提供横向布局或处理旋转,就像某些应用程序一样,如果识别到方向发生更改,它们将提示用户更改方向,因为应用程序不支持此类方向。

它可能会在未来发生变化=>目前它不会影响我们的构建过程,但它可能会在未来发生变化


12
嘿!工程师们想要限制应用程序在横屏模式下的使用。让我们给他们screenOrientation标签。过了一会儿:嘿!用户们想要通过手机旋转来控制方向。让我们限制使用screenOrientation标签。 - Mykola Tychyna

11

在Android Studio 3.6.0中,他们希望用户处理屏幕方向,并鼓励开发者使用ViewModel。让我详细解释一下screenOrientation。

android:screenOrientation="portrait"

会导致错误,你必须指定以下选项之一:

android:screenOrientation="fullSensor"或android:screenOrientation="unspecified"

fullSensor 意味着无论您是否关闭旋转功能,它都将根据您移动手机来更改方向。

unspecified 意味着如果您关闭旋转功能,则仅保持在该方向,如果未关闭旋转功能,则根据您移动手机来更改方向。


7
请在 android:screenOrientation="portrait" 后添加以下内容。
tools:ignore="LockedOrientationActivity"

然后点击 Alt+Enter

图片描述


你能解释一下为什么吗? - Prasanna Anbazhagan
我无法...这个错误已经在最新版本的Android Studio中得到了修复...这是来自Android Studio黄点的建议... - Damo Gurcinovski

6

I found 2 way of solving this problem

First,

Android Studio -> Preferences (for Mac) or Settings (for Windows)
-> Search "chrome" 
-> Uncheck "Activity is locked to an orientation" 
-> Apply and Ok 
-> Sync Project with Gradle file

其次,

Select "Run" from the main menu 
-> Edit Configurations.
-> Launch options - Launch
-> Select Nothing or Specified Activity
-> Sync Project with Gradle file

这似乎是解决问题的正确答案。你应该有关闭此警告的选项,逻辑上看起来最好的地方应该是在“首选项”下。但是,在我的 Mac Android Studio 上第一个选项不存在,而第二个选项会停止应用程序运行。tools:ignore 命令可以做同样的事情,但它可以与触发它的 screenOrientation 命令并排放置在代码中。也许这就是为什么他们要推荐我们这样做的原因。 - Richard Kirk

5
tools:ignore="GoogleAppIndexingWarning,LockedOrientationActivity"

2
请问您能否解释一下这段代码的用途? - Rahul

4

我已经使用了以下步骤,对于我来说它完全有效。在Android Studio 3.6.0中,我认为他们希望用户处理方向,并鼓励开发人员使用ViewModel。请使用以下步骤来忽略它。

首先添加:

xmlns:android="http://schemas.android.com/apk/res/android"

在清单标签中添加。
其次,添加


tools:ignore="LockedOrientationActivity" 

在应用程序标签中。愉快的编码。


1
我曾经遇到过这个问题,在我的需求中,有些活动会支持两种方向并保持竖屏,这种情况下,我通过以下步骤解决了这个问题: 案例1:锁定方向
步骤1:请在AndroidManifest.xml中添加以下行应用程序标签

tools:ignore="LockedOrientationActivity"

<application
android:name=".activity.MyApplication"
tools:ignore="LockedOrientationActivity">

步骤2:如果您想将屏幕方向锁定为纵向或横向,请在activity标签中添加以下行

android:screenOrientation="portrait"或"landscape"

情况2:假设您希望在特定活动中允许方向并具有特定的横向设计

步骤1: 从configchanges中删除方向值,如果存在,则从activity标记中删除屏幕方向,并在Activity中使用(LifecycleObserver)以在更改方向时不丢失值。

android:configChanges="orientation"
android:screenOrientation="portrait"或"landscape"

这是我解决这个问题的方法,希望它有所帮助,谢谢和愉快编码。


0

请尝试以下代码:

if(MainActivity.this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT){
    MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

1
请在您的答案中添加一些解释,以便其他人可以从中学习。 - Nico Haase
如果方向竖屏被锁定,则该活动的方向将保持不变,即永远不会切换到横屏。 - Abu Baker Nawaz

-2
尝试将以下内容放入活动标签中。
android:configChanges="orientation"
android:screenOrientation="portrait" 

不是帮助。它是纵向和横向模式。 - Alexei
更新了答案,你需要添加两个。 - Swayangjit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接