Ориентация экрана и значения в манифесте.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.Ява нажмите на нее , справа - вы увидите новое окно: прокрутите вниз и выберите ориентация - "портретная"