В 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"

Почему?

a_subscriber
источник

Ответы:

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"
Android
источник
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
tktschool
источник
1

Добавить следующую строку после android:screenOrientation="portrait"

tools:ignore="LockedOrientationActivity"

Затем нажмите Alt+Enter

введите описание изображения здесь

Дамо Гурчиновский
источник
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 = "портрет" или "пейзаж"

Это способ, которым я решаю эту проблему, надеюсь, это поможет, спасибо и счастливого кодирования.

MohanRaj S
источник
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>

Надеюсь это поможет!

R.Desai
источник
этот ответ не работает, в 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" 
Swayangjit
источник
Нет помощи. Это портретный и ландшафтный режим
a_subscriber
Обновленный ответ, вам придется добавить оба
Swayangjit
1
Это не работает на Android Studio 3.6.
Евгений