2013-02-24 2 views
5

Я знаю, что вы можете ограничить изменение ориентации в файле манифеста для своего приложения Android, но мне было интересно, есть ли способ сделать это в зависимости от типа устройства/размера.Предотвращение изменения ориентации Android на определенных устройствах

Я хотел бы предотвратить его на небольших/средних телефонах, но разрешить его на больших телефонах/планшетах.

Каков наилучший способ достичь этого? Любая помощь приветствуется.

ответ

6

Для этого, я думаю, вам нужно будет свернуть две вещи в одном.

  1. Во-первых, получить размер экрана устройства
  2. а затем, основываясь на результате включения или отключения ориентации.

Для первой части:

int screenSize = getResources().getConfiguration().screenLayout & 
     Configuration.SCREENLAYOUT_SIZE_MASK; 

switch(screenSize) { 
    case Configuration.SCREENLAYOUT_SIZE_LARGE: 
     Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show(); 
     break; 
    case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
     Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show(); 
     break; 
    case Configuration.SCREENLAYOUT_SIZE_SMALL: 
     Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show(); 
     break; 
    default: 
     Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show(); 
} 

Кредит: https://stackoverflow.com/a/11252278/450534 (Решение было легко доступно на SO)

И, наконец, на основе результата указанного выше кода, либо из них:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

ИЛИ

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
+1

+1 для «Решение было легко доступно на SO» – Pragnani

+2

@ Прагани: Должна быть ссуда, когда это произойдет. Не могу утверждать, что не мое ;-) –

+0

Я ценю, что решение было легко доступно в SO, но я не мог найти его по названию вопроса, так как на этом этапе я не знал, что делать это программно было единственным способом. Я надеялся, что вокруг будет какая-то конфигурация. Спасибо, в любом случае. – Zyga

1

Возможно, я ошибаюсь, но насколько я знаю, нет прямого способа сделать это.

Необходимо программно определить размер экрана и, исходя из этого, разрешить или запретить изменения ориентации.

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{  
    // screen is large.. allow orientation changes 
} 

else 
{ 
     //restrict orientation 
} 
0

вы можете использовать во время деятельности onCreate проверки которых размер устройства у вас есть и вызвать метод setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); (или любую другую ориентацию вы хотите для этого размера).

Имейте в виду, что если деятельность не указана в запрошенной ориентации, она будет уничтожена новым.

0

проверить размер экрана в вашем коде и решили

setRequestedOrientation();

или не

0

Вам необходимо перезаписать общественную пустоту onConfigurationChanged(Configuration newConfig) и создать свою собственную логику для проверки плотности и размера экрана.

Но будьте осторожны .. это не хорошая практика.

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