В AndroidManifest: Ожидается андроид: screenOrientation = «не указано»


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>

Я запускаю приложение и SplashActivityпоказывает в portraitрежиме. Ницца. Но редактор показывает следующую ошибку:

Expecting android:screenOrientation="unspecified"

Почему?

Ответы:


69

В вашем теге манифеста (чуть ниже xmlns:android="http://schemas.android.com/apk/res/android") поместите

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

Затем внутри тега приложения поместите

tools:ignore="LockedOrientationActivity"

или если у вас уже есть инструменты: игнорировать в теге приложения, а затем установить в качестве инструментов: ignore = "GoogleAppIndexingWarning, LockedOrientationActivity"
— Mystery

20

это влияет только на Android Studio 3.6+

В чем проблема здесь? Эта проблема возникает из-за того, что платформа Android хочет, чтобы пользователь сам управлял ориентацией приложения, поэтому не рекомендуется ограничивать ориентацию приложения, например, если пользователь хочет использовать приложение в горизонтальной ориентации, он просто переворачивает устройство, и датчики будут выполнять работу, но когда разработчик ограничивает ориентацию экрана, даже когда работает датчик вращения, приложение будет оставаться в заданном состоянии, что ограничивает возможности устройства пользователя.

Что делать сейчас? У вас есть два варианта. Во-первых, игнорировать ошибку, так как она не вызовет сбоя сборки, даже если я делаю то же самое, и генерация apk / aab выполняется как обычно. Другой вариант - предоставить альбомные макеты или обработать поворот, как в некоторых случаях. приложения, распознающие изменение ориентации, будут предлагать пользователю изменить ориентацию, поскольку приложение не поддерживается в такой ориентации.

Это может измениться в будущем => в настоящее время это не влияет на наш процесс сборки, но это может измениться в будущем


9

В Android Studio 3.6.0, я думаю, они хотят, чтобы пользователь управлял ориентацией, и поощряли разработчиков использовать вещи ViewModel . Позвольте мне объяснить экранную ориентацию в деталях

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

Я нашел 2 способа решения этой проблемы

Первый,

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

инструменты: игнорировать = "LockedOrientationActivity"

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

Шаг 2: Если вы хотите заблокировать ориентацию экрана в книжной или альбомной ориентации, добавьте следующую строку в тег активности

android: screenOrientation = "портрет" или "пейзаж"

Случай 2: - Предположим, вы хотите разрешить ориентацию в конкретной деятельности и иметь конкретный дизайн для ландшафта

Шаг 1: Удалите значение Orientation в configchanges и удалите ориентацию экрана, если она существует из тега Activity, и мое личное предложение использовать (LifecycleObserver) в Activity, чтобы не потерять значения при изменении ориентации.

android: configChanges = "direction"
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
— Педро Энрике

0

Вы можете использовать этот код:

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

1
Пожалуйста, добавьте пояснения к своему ответу, чтобы другие могли извлечь из него урок
— Нико Хаас

если ориентационный портрет заблокировал ориентацию этого действия. это означает, что ориентация никогда не менялась на ландшафт.
— Абу Бейкер Наваз

Пожалуйста, отредактируйте свой ответ, чтобы он содержал все объяснения
— Нико Хаас

-1

Попробуйте добавить следующее в тег активности

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

Нет помощи. Это портретный и ландшафтный режим
— a_subscriber

Обновленный ответ, вам придется добавить оба
— Swayangjit

1
Это не работает на Android Studio 3.6.
— Евгений
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.