2010-10-29 6 views
1

Я использую версию Android для Android HTC HERO 2.1.Ошибка ориентации экрана Android

Активность Я пишу:

<activity android:name=".gogogo" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.mine" 
      android:screenOrientation="landscape" 
      android:configChanges="orientation"> 

пусть мои изменения ориентации на альбомную.

Однако я выяснил, что каждый раз, когда я нажимаю кнопку «power», а затем возвращаюсь к своей деятельности, он всегда начинается с портрета.

Я пробовал игру: TEETER, которая была написана не мной. С той же проблемой тоже, кто-нибудь знает, как это исправить?

Редактировать: it always start at portrait. -> Я имею в виду, если вы вернетесь с власти, вам нужно прокрутить вниз, чтобы сделать все, что-то вроде блокировки экрана.

Вы можете видеть, что в верхней части экрана находится «строка состояния», и в это время ориентация «portrait». Итак, после того, как вы немного прокрутите «блокировку экрана», вы увидите, что активность (например, TEETER) находится в состоянии «portrait». Когда вы прокрутите весь путь вниз, ориентация активности внезапно изменится на состояние «landscape».

Итак, вывод: моя деятельность вынуждена ориентироваться один раз. И я действительно хочу знать, как это исправить!

+0

Почему вы android: configChanges = "ориентация" там? вам это не нужно, если ваша активность привязана к одной ориентации. Но по вашему вопросу, я не знаю, вы также тестировали на других устройствах или на эмуляторе, есть ли проблема там и там? –

+0

Это для того, чтобы «не дать моей деятельности убить и начать снова». –

ответ

1

Hai Steven Shih: Pls просмотрите эту страницу руководства разработчика.

http://developer.android.com/guide/topics/manifest/activity-element.html 

и попробовать эту линию

android:windowSoftInputMode="stateUnspecified|adjustPan" 
+0

@Steven Shih: Hai Steven Shih сделал это пробовал, все еще Вы столкнулись с проблемой –

+0

Привет, я пробовал. Это не устраняет мою проблему. –

0

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

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    if (hasFocus) 
     setContentView(mGameView); 
    else 
     setContentView(mEmptyView); 
} 

Где mGameView - это ваш обычный контент, а mEmptyView - это просто объект View. Активность по-прежнему будет отображаться в портрете для кадра или двух, но она не будет видна пользователю.

Я проверил это с HTC Hero и Nexus S.

1

Не уверен, если это та же проблема, но вот проблема, которую я имел:

  • заставляю ориентацию, как пейзаж в манифеста
  • Моя деятельность имеет два surfaceviews (предварительный просмотр камеры и слой поверх него)
  • После нажатия на кнопку питания и вернется, мои взгляды вдруг в неправильной ориентации

Вроде бы та же проблема, как еще один вопрос: Disable orientation but detect orientation

Я думаю, что проблема в том, что после нажатия кнопки питания, экран блокировки заставляет ориентацию, как портрет. В onConfigurationChanged я получаю изменение ориентации прямо, когда я нажимаю кнопку питания, что было неожиданным, потому что я сказал явно заблокировать ориентацию.Дело в том, что когда другая деятельность, которая идет впереди, заставляет ориентацию, другие действия получают уведомление об изменении ориентации, даже если они просят четкую ориентацию.

Вот мой обходной путь:

  • в OnPause, отрывать взгляды с removeView (мое приложение программно созданные представления, а не макет XML)
  • в onResume, сначала проверьте, если ориентация является тот, который вы запрошен (getResources(). getConfiguration().). Если это так, повторно подключите представления (addContentView или что-то еще).
  • Если ориентация не та, которую вы ожидаете, вызовите setRequestedOrientation
  • onConfigurationChanged будет вызываться, чтобы указать, что ориентация была изменена на запрошенную вами. На этом этапе вы можете повторно подключить представления с помощью setContentView.

Это немного сложнее, но это то, что мне пришлось пройти в моем конкретном случае, так как мои представления создаются динамически и напрямую присоединяются к по умолчанию FrameLayout активности. Возможно, после этого я пропустил какое-то поведение по умолчанию, но таким образом я мог бы достичь реактивности, которую я искал.

Смежные вопросы