Ориентация экрана и значения в manifest.xml - PullRequest
15 голосов
/ 21 марта 2012

Я хочу использовать все виды деятельности в моей форме в альбомной или портретной ориентации. Когда пользователь выбирает ориентацию - это действует для всех видов деятельности. Пробовал с «задним» вариантом ориентации. По словам Google - ориентация будет зависеть от предыдущей активности. Моим первым действием было использование setRequestedOrientation, чтобы установить выбранное из ориентации пользователя. Следующие действия должны следовать той же ориентации. Должен ли я поместить setRequestedOrientation в их код тоже? Или полагаться на параметр «сзади» в манифесте? Установка setRequestedOrientation может снова вызвать onCreate?

UPDATE: Пробовал "портрет" и setRequestedOrientation () - resilt si onCreate вызывался 2 раза. Проблема в следующем задании -> из-за «портрета» в первом задании - андроид запустил следующее задание с той же ориентацией. Он игнорирует "альбомную" ориентацию, которую я установил: (

Ответы [ 7 ]

21 голосов
/ 21 марта 2012

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

android: screenOrientation = "портрет"

android:screenOrientation="sensorPortrait"

в качестве атрибута дляэта деятельность в этом манифесте.Но если вы хотите установить время выполнения ориентации в зависимости от того, какой была предыдущая ориентация при запуске приложения, вам нужно проверить предыдущую ориентацию в onCreate(), а затем программно установить ее на это значение, используя setRequestedOrientation()

ОБНОВЛЕНИЕ: Как указано @ s.co.tt, используйте android:screenOrientation="sensorPortrait" для лучшей поддержки на планшетах.

Для получения дополнительной информации о различных значениях для android:screenOrientation и чтокаждый из них, посмотрите на документы:

https://developer.android.com/guide/topics/manifest/activity-element.html#screen

7 голосов
/ 21 марта 2012
<activity
            android:name=".Android_mobile_infoActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
  </activity>
2 голосов
/ 02 января 2018

Чтобы обработать изменения в ориентации, добавьте следующую строку в AndroidManifest.xml: android:configChanges="orientation|screenSize" под тегом <activity>, как показано ниже: -

   <application
        android:allowBackup="true"
        ----------
        ---------- >
        <activity android:name=".MainActivity"
            android:configChanges="orientation|screenSize">
        ----------
        </activity>
        ----------
    </application>

Примечание : при любом изменении конфигурации, например orientation, screenLayout, screenSize и т. Д., Действие перезапускается и вызывается его метод onCreate. Чтобы предотвратить это, мы должны обработать любые изменения в конфигурации.

1 голос
/ 23 декабря 2015

Сделайте это программно, например, в базовом классе Activity

Я попробовал работающий мобильный телефон и планшет.используйте любой портрет или пейзаж.

@Override 
public void onCreate(Bundle savedInstanceState) {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   //or
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

manifest.xml внутри тега приложения

 <activity
        android:name=".Login_Activity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" />

или

 <activity
        android:name=".Login_Activity"
        android:label="@string/app_name"
        android:screenOrientation="landscape" />
0 голосов
/ 10 сентября 2014

Зайдите в редактор Android Manifest, там внизу вы увидите MainActivity.java, щелкните по нему, справа - вы увидите новое окно: прокрутите вниз и выберите выберите ориентацию - «портрет»

0 голосов
/ 21 марта 2012

Пока я ставлю чек в Create:

m_bSkip = (this.getRequestedOrientation() != MyApp.sInstance.GetScreenOrientation());
if (m_bSkip)
  return;

Когда я вхожу в oncreate и ориентация экрана не нужна - выход.Когда я вхожу в onCreate и ориентация экрана желательна - продолжаю инициализацию.Это исправляет ситуацию без необходимости сохранять асинхронную задачу, связанную с действием, и проверять наличие новой активности.Конечно, все функции: onStart, onResume, onPausde, onStop ... должны проверять этот флаг, чтобы избежать исключения нулевого указателя.

0 голосов
/ 21 марта 2012

Исходя из моего опыта, я бы порекомендовал устанавливать setRequestedOrientation в каждом действии в методе onCreate, onCreate больше не будет вызываться, это безопасно.

...