У меня есть приложение, которое я просто хотел бы использовать в портретном режиме, поэтому я определил android: screenOrientation = "Portrait" в манифесте XML. Это работает нормально для телефона HTC Magic (и предотвращает изменение ориентации на других телефонах).
Но у меня проблема с телефоном HTC G1, когда я открываю аппаратную QWERTY-клавиатуру (не виртуальную клавиатуру). Моя активность остается в портретном режиме, но, похоже, она перезапускается и теряет все свои состояния. Этого не происходит с версией HTC Hero .
Мое приложение довольно большое, поэтому я не хочу, чтобы оно перезапускалось и теряло все свои состояния при открытой клавиатуре. Как я могу предотвратить это?
android
android-activity
android-orientation
Видар Вестнес
источник
источник
Ответы:
Обновление апрель 2013: не делай этого. Это не было хорошей идеей в 2009 году, когда я впервые ответил на вопрос, и сейчас это действительно не очень хорошая идея. Посмотрите этот ответ hackbod по причинам:
Избегайте перезагрузки активности с асинхронной задачей при изменении ориентации в Android
Добавьте
android:configChanges="keyboardHidden|orientation"
в свой AndroidManifest.xml. Это говорит системе, с какими изменениями конфигурации вы собираетесь справиться самостоятельно - в этом случае ничего не делать.См. Ссылку для разработчиков configChanges для более подробной информации.
Однако ваше приложение может быть прервано в любой момент, например, по телефону, поэтому вам действительно нужно добавить код, чтобы сохранить состояние приложения, когда оно приостановлено.
Обновление: Начиная с Android 3.2, вам также необходимо добавить «screenSize»:
Из руководства разработчика. Обработка конфигурации.
источник
Вам нужно изменить AndroidManifest.xml, как упоминалось в Intrications (ранее Ashton), и убедиться, что действие обрабатывает событие onConfigurationChanged так, как вы хотите, чтобы оно обрабатывалось. Вот как это должно выглядеть:
источник
setRequestedOrientation()
в системуonCreate()
.onConfigurationChanged()
раньше,onCreate()
если так лучше установить ориентацию перед настройкой contentViews в oncreate , настройка конфигурации, к которой он принадлежит, также более чистая, поэтому этот ответ все еще остается хорошим.Я всегда находил, что вам нужны оба
источник
Как сказано, установите
android:configChanges
вашу активность (в файле манифеста),keyboardHidden|orientation
а затем:1) Переопределить
onConfigurationChanged()
2) Добавьте эту строку к вашей деятельности
onCreate()
Это лучше, чем добавлять одну и ту же строку
onConfigurationChanged
, потому что ваше приложение переключится в портретный режим, а затем обратно в ландшафт (это произойдет только один раз, но это раздражает).Также вы можете установить
android:screenOrientation="nosensor"
для вашей деятельности (в манифесте). Но, используя этот способ, вы вообще не сможете справиться с изменениями ориентации.источник
Использовать это..
источник
В методе OnCreate вашей активности используйте этот код:
Теперь ваша ориентация будет установлена на портрет и никогда не изменится.
источник
В файле AndroidManifest.xml для каждого действия, которое вы хотите заблокировать, добавьте последнюю
screenOrientation
строку:Или андроид: screenOrientation = "пейзаж" .
источник
В вашем файле androidmanifest.xml :
или
источник
Чтобы заблокировать экран по коду, вы должны использовать фактическое вращение экрана (0, 90, 180, 270) и знать его естественное положение, в смартфоне естественное положение будет портретным, а в планшете - это будет пейзаж.
Вот код (методы блокировки и разблокировки), он был протестирован на некоторых устройствах (смартфоны и планшеты) и отлично работает.
источник
В Visual Studio Xamarin:
using Android.Content.PM;
вам список пространств имен деятельности.[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
как атрибут для вашего класса, вот так:
источник
Добавить
к вашему манифесту.
источник
Обратите внимание, что ни один из методов сейчас не работает!
В Android Studio 1 одним простым способом является добавление
android:screenOrientation="nosensor"
.Это эффективно блокирует ориентацию экрана.
источник