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

Чому?

Відповіді:


67

У вашому тезі маніфесту (трохи під 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 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

інструменти: ignore = "LockedOrientationActivity"

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

Крок 2: Якщо ви хочете заблокувати орієнтацію екрана в портретному або пейзажному режимі, додайте наступний рядок у тег активності

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

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

Крок 1: Видаліть значення орієнтації у конфігураційних змінах та видаліть орієнтацію екрана, якщо вона існує у тегу активності, і моє особисте пропозиція (LifecycleObserver) у програмі «Активність» без втрати значень під час зміни орієнтації.

android: configChanges = "орієнтація"
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.