2010-04-18 4 views
13

Я попытался заморозить ориентацию с помощью:Как заблокирована ориентация приложения (пейзаж или портрет)?

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Хотя дисплей остается в портретной ориентации, активность по-прежнему воссоздан. Есть идеи, как это решить?

Как можно заблокировать ориентацию приложения, чтобы активность не воссоздавалась при изменении ориентации?

ответ

40

Во-первых, не используйте setRequestedOrientation(), если вы можете этого избежать. Используйте вместо этого атрибут android:screenOrientation в своем элементе манифеста <activity>.

Во-вторых, вам понадобится android:configChanges="keyboardHidden|orientation" в вашем манифестном элементе <activity>, чтобы предотвратить цикл уничтожения/воссоздания.

1

Лучшим решением является использование сохраненного экземпляра. Если вы заблокируете ориентацию экрана, это означает, что вы вынуждаете пользователя использовать приложение в соответствии с установленными вами ограничениями. Поэтому всегда используйте onSaveInstanceState. Читайте по этой ссылке: http://developer.android.com/training/basics/activity-lifecycle/recreating.html

4

Более конкретный пример секции активности в AndroidManifest.xml для портретной ориентации:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:configChanges="keyboardHidden|orientation|screenSize"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Где android:screenOrientation устанавливает начальную ориентацию и android:configChanges аннулирует события, которое вызывает соответствующие методы жизненного цикла на экране.

3

Попробуйте это:

1.- Установите желаемую ориентацию экрана в вашем AndroidManifest.xml

android:screenOrientation="portrait|landscape" 

Он должен выглядеть следующим образом:

<application 
    android:allowBackup="true" 
    android:icon="~icon path~" 
    android:label="~name~" 
    android:supportsRtl="true" 
    android:screenOrientation="portrait" 
    android:theme="@style/AppTheme"> 
    </application> 

2.- Добавьте к этому ваш inCreate void (или где угодно) в вашем файле активности java (например: «MainActivity.java»):

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 

Он должен выглядеть следующим образом:

protected void onCreate(Bundle savedInstanceState) { 
    super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);} 

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

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