2012-05-08 4 views
2

У меня есть приложение, которое хорошо выглядит в любой ориентации на большом или увеличенном размере экрана, но должно быть ограничено портретом на телефонах. Я знаю, что вы можете ограничить ориентацию Деятельности в манифесте, но есть ли способ сделать это условно? Или есть какая-то собственность, которую я могу установить в самой деятельности, чтобы выбрать, какие ориентации поддерживаются?Android: Ограничить ориентацию активности на основе размера экрана

ответ

9

Это решение я использую в своих приложениях:

public void onCreate(Bundle savedState) { 
    //... 

    if(isScreenLarge()) { 
     // width > height, better to use Landscape 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } else { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
} 

public boolean isScreenLarge() { 
    final int screenSize = getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK; 
    return screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE 
      || screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE; 
} 
+0

Большое спасибо. Единственное изменение, которое я сделал, это использовать 'SCREEN_ORIENTATION_UNSPECIFIED' вместо' SCREEN_ORIENTATION_PORTRAIT', потому что я хотел, чтобы планшет поддерживал как пейзаж, так и портрет. – mtmurdock

+1

Есть ли способ сделать это в макете или манифесте? – mtmurdock

+0

Будьте осторожны, что 'onCreate()' будет вызываться дважды в случае вращения активности после 'setRequestedOrientation()' –

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