在AndroidManifest中:期待android:screenOrientation =“ unspecified”


44

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"

为什么?

Answers:


67

在清单标签(位于下方xmlns:android="http://schemas.android.com/apk/res/android")中,

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

然后在应用程序标签内,放入

tools:ignore="LockedOrientationActivity"

或如果您已经在应用程序标记中包含tools:ignore,然后将其设置为tools:ignore =“ GoogleAppIndexingWarning,LockedOrientationActivity”
奥秘

20

它只会影响Android Studio 3.6+

这是什么问题?发生此问题的原因是android框架希望用户自己控制应用程序的方向,因此不建议您限制应用程序的方向,例如,如果用户要以横向使用该应用程序,则只需翻转设备,传感器就会完成工作,但是当开发人员会限制屏幕方向,即使旋转传感器正常工作,应用也会保持预定义状态,这会限制用户设备的功能。

现在做什么?您有两个选择。第一个是忽略该错误,因为即使我这样做也不会导致任何构建失败,并且apk / aab生成仍然如常。识别方向是否更改的应用程序,它们将提示用户更改方向,因为该方向不支持该应用程序

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


9

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

android:screenOrientation="portrait"

将给您错误,您必须指定

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

fullSensor表示您是否启用了“旋转关闭”功能,否则它将根据您移动手机而改变方向

未指定表示如果启用了“关闭旋转”功能,则它将仅保持该方向,否则将根据您移动手机而更改方向。


4
tools:ignore="GoogleAppIndexingWarning,LockedOrientationActivity"

2
您能否也请解释一下此代码的用途。
拉胡尔

2

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

首先添加:

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

在清单标签中。

其次,添加

tools:ignore="LockedOrientationActivity" 

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


1

我找到了解决这个问题的两种方法

第一,

Android Studio -> Preferences (or settings in Windows)
-> search "chrome" 
-> Uncheck "Activity is locked to an orientation" 
-> apply and ok 
-> Sync Project with Gradle flie

其次,

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


0

我已经遇到了这个问题,在我的要求下,某些活动将同时支持两个方向,而其余活动将保持纵向,在这种情况下,我通过以下步骤解决了:

情况1:-锁定方向

步骤1:在AndroidManifest.xml中添加以下行Application标签

工具:ignore =“ LockedOrientationActivity”

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

步骤2:如果您想以纵向或横向锁定屏幕方向,请在活动代码中添加以下行

android:screenOrientation =“ portrait”或“ landscape”

情况2:-假设您是否要允许特定活动的定向并针对景观进行特定设计

步骤1: 删除configchanges中的Orientation值,并从活动标签中删除屏幕方向(如果存在的话),以及我的个人建议(LifecycleObserver)在Activity中用于更改方向时不会丢失任何值。

android:configChanges =“ orientation”
android:screenOrientation =“纵向”或“风景”

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


0

试试这个解决方案:

AndroidMainfest:

<activity
    android:name="com.ui.activity.SplashActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

希望这可以帮助!


这个答案不起作用,在android 3.6中
Pedro Henrique

0

您可以使用以下代码:

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

1
请为您的答案添加一些解释,以便其他人可以从中学习
Nico Haase

如果定向肖像锁定了该活动的定向。这意味着方向永远不会改变为横向。
阿布·贝克·纳瓦兹

请编辑您的答案以包含所有解释
Nico Haase

-1

尝试将以下内容放入活动标签

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

没有帮助。纵向和横向模式
a_subscriber'October

更新了答案,您将必须同时添加两者
Swayangjit

1
它不适用于Android Studio 3.6。
伊夫根
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.