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

In AndroidManifest: Expecting android:screenOrientation="unspecified"

Android Studio 3.6.

我希望我的应用程序始终处于 portrait 模式。所以在我的 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>

我 运行 应用程序和 SplashActivityportrait 模式显示。好的。 但编辑器显示以下错误:

Expecting android:screenOrientation="unspecified"

为什么?

尝试将以下内容放入 activity 标签

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

它只影响 Android Studio 3.6+

这里的问题是什么? 出现此问题是因为 android 框架希望用户自己控制应用程序方向,因此不建议限制您的应用程序方向,例如,如果用户想要横向使用应用程序,他只需翻转设备,传感器就会执行工作,但当开发人员限制屏幕方向时,即使旋转传感器工作,应用程序仍将保持预定义状态,以某种方式限制用户的设备功能。

现在怎么办? 你有两个选择。 首先是忽略该错误,因为它不会导致任何构建失败,即使我正在做同样的事情并且 apk/aab 生成与往常一样 另一种选择是提供横向布局或像某些应用程序一样处理旋转,这些应用程序可以识别方向是否发生变化,它们将提示用户更改方向,因为在这种方向上不支持该应用程序

将来可能会改变 => 目前它不会影响我们的构建过程,但将来可能会改变

在 Android studio 3.6.0 中,我猜他们希望用户处理方向并鼓励开发人员使用 ViewModel 东西。 让我详细解释一下screenOrientation

android:screenOrientation="portrait"

会给你错误,你必须指定

android:screenOrientation="fullSensor" or android:screenOrientation="unspecified"

fullSensor 表示您是否打开 "Rotate off" 它将根据您移动 phone

改变方向

unspecified 意味着如果你打开了旋转关闭那么它将只停留在那个方向,如果没有那么它会根据你移动改变方向 phone.

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

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

然后在 application 标签里面,把

tools:ignore="LockedOrientationActivity"
tools:ignore="GoogleAppIndexingWarning,LockedOrientationActivity"

我遇到过这个问题,在我的要求中,一些 activity 将支持两个方向并且仍然保持纵向,在这种情况下,我通过以下步骤解决了:

Case-1:- 锁定方向

第一步: 请在 AndroidManifest.xml

中添加以下行 Application 标记

tools:ignore="LockedOrientationActivity"

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

第 2 步: 如果您想锁定屏幕方向为纵向或横向 在 activity 标签

中添加以下行

android:screenOrientation="portrait" or "landscape"

Case-2:- 假设如果你想特别允许方向 activity 并且有一个特定的设计风景

第一步: 删除 configchanges 中的 Orientation 值并删除 activity 标签中存在的屏幕方向,我个人建议在 Activity 中使用 (LifecycleObserver) 以在更改方向时不丢失值。

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

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

我使用了以下程序。它非常适合我。在 Android studio 3.6.0 中,我认为他们希望用户处理方向并鼓励开发人员使用 ViewModel 的东西。使用以下过程忽略它。

首先添加:

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

在清单标签中。

其次,添加

tools:ignore="LockedOrientationActivity" 

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

我找到了 2 种方法来解决这个问题

首先,

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

android:screenOrientation="portrait"

之后添加以下行
tools:ignore="LockedOrientationActivity"

然后点击Alt+Enter

尝试使用以下代码:

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