Ориентация экрана и значения в манифесте.XML

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

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

7 ответов


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

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


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

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

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

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


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

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

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

манифест.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" />

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


пока я ставлю чек в onCreate:

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

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


перейдите в Редактор Манифеста Android, там вы увидите MainActivity.Ява нажмите на нее , справа - вы увидите новое окно: прокрутите вниз и выберите ориентация - "портретная"