Intereting Posts

Android ICS Launcher 4.0.x не может поддерживать ориентацию экрана

У меня странный случай для Android ICS Launcher 4.0.x.

Предварительное условие:

Процедура:

  1. Перейдите на рынок (Play Store), загрузите «Go Task Manager»

  2. Откройте вкладку «Виджеты» в Launcher, найдите «Mem Optimize», перетащите на главный экран (рабочее пространство)

  3. Загрузите и установите «Fruit Ninja»

  4. Создайте ярлык «Фруктовый ниндзя» рядом с виджемом «Mem Optimize» на главном экране.

  5. Выполните «Fruit Ninja» и держите свой телефон в LANDSCAPE (держите его в руке в этом положении, не изменяйте это)

  6. На экране меню «Fruit Ninja», срез «Выход», выберите «Да»,

  7. Теперь вернемся на начальный экран Launcher, коснитесь виджета «Mem Optimize»

Текущий результат:

  • После шага 7 экран некоторое время поворачивается к LANDSCAPE и возвращается в ПОРТРЕТ.

Expectation:

  • После шага 7 экран должен храниться в ПОРТРЕТЕ.

Мои попытки (изменить исходный код Launcher ICS):

  • Добавить в «Manifest.xml»: android:screenOrientation="portrait" => все еще не может решить проблему.

  • Изменить конфигурацию конфигурации, android:configChanges="orientation|screenSize" => все еще не может решить проблему.

  • Использование: setRequestedScreenOrientation(PORTRAIT) => все еще не может решить проблему.

То, что я пробовал, работало на Android 2.x; Однако, с 4.0.3+, как-то он работает не так, как ожидалось. Кто-нибудь знает об этом?

Solutions Collecting From Web of "Android ICS Launcher 4.0.x не может поддерживать ориентацию экрана"

Проблема не в Launcher. Проблема в том, что одна конфигурация (и включает в себя ориентацию) распределяется между всеми действиями на телефоне.

Поэтому, если у вас есть активность, которая задает ориентацию на Landspace, например Camera (это классический пример, где я работаю), это «сделает» все другие действия тоже на ландшафте, потому что, как я уже сказал, информация уникальна в системе И разделяют между всеми.

Это происходит с самого начала Android, хотя иногда вы этого не заметите, потому что изменения довольно быстрые.

Чтобы проверить, что я говорю, сделайте следующее. Напишите действие с диалоговой темой, такой как @android:style/Theme.Holo.Dialog , поэтому он не будет охватывать весь экран, и вы все равно сможете увидеть активность, которая была ниже. Эта деятельность должна иметь фиксированную ориентацию. Предположим, вы настроили его на пейзаж. Затем используйте am start на оболочке Android, чтобы начать работу, которую вы только что создали, поверх любой другой активности. Вы увидите, что независимо от ориентации предыдущей активности, как только вы запускаете тестовую активность, предыдущее действие будет иметь ту же ориентацию, что и ваша тестовая активность. Когда вы нажмете назад, предыдущее действие восстановит ориентацию. Но иногда это может занять некоторое время, поэтому вы видите такие вещи, как ваш текущий результат.

У пусковой установки ICS есть несколько мест, где она будет устанавливать ориентацию на неуказанную. Просто setRequestedOrientation поиск Launcher.java для setRequestedOrientation , но в частности это либо на сборках «eng», либо на планшетах. Он делает это в onCreate, но также после перетаскивания из appscustomize.

Из Launcher.java's onCreate:

 // On large interfaces, we want the screen to auto-rotate based on the current orientation if (LauncherApplication.isScreenLarge() || Build.TYPE.contentEquals("eng")) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); }