2013-10-09 1 views
3

Я хотел бы сделать следующее в моем приложении: толькоНастройка различных ориентации для телефонов и планшетов на Android

  • портретный режим для телефона
  • режим Портрет и ландшафтный режим для таблеток.

Я знаю, что я могу легко изменить ориентацию в файле манифеста, но это повлияет на все приложение.

Я также думал о создании отдельных действий для обработки различных версий, но я не знаю, как определить тип устройства с помощью приложения.

Кто-нибудь знает, как справиться с этим?

ответ

8

Вы можете использовать следующий фрагмент кода, чтобы различать нормальный/большой экран и соответственно блокировать изменение ориентации.

public static boolean isTablet(Context context) { 
    return (context.getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK) 
      >= Configuration.SCREENLAYOUT_SIZE_LARGE; 
} 
1

Вы должны идентифицировать планшет с Android классификаторами экрана: Screen qualifiers

Затем вы кладете в правом макете папки нужных параметров. Например, вы можете добавить атрибут ориентация: портрет только в формате xml файл для больших экранов и ориентация: портрет для всех остальных. Смотрите структуры папок здесь:

Реза/макет/my_layout.xml // макет для размера экрана (нормального «по умолчанию») разрешения/макет небольшого/my_layout.xml // макет для небольшого размера экрана Реза/расположения -large/my_layout.xml // макет для большого размера экрана res/layout-xlarge/my_layout.xml // макет для особо большого размера экрана res/layout-xlarge-land/my_layout.xml // макет для особо больших альбомная ориентация

Посмотрите в руководстве Google: http://developer.android.com/guide/practices/screens_support.html

0

я полагаю, вы можете сделать небольшой трюк для него, попробуйте использовать Configuration.screenLayout:

switch (this.getResources().getConfiguration().screenLayout) { 
     case Configuration.SCREENLAYOUT_SIZE_SMALL: 
       return "small"; 
      case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
       return "normal"; 
      case Configuration.SCREENLAYOUT_SIZE_LARGE: 
       return "large"; 
      case 4: // screen xlarge 
       return "xlarge"; 
      default: 
       return "undefined"; 
      } 
     } 

благодаря

0

Проблема, которую вы встретив, к сожалению, становится серой зоне. Мы можем расшифровать плотность телефона и физический размер устройства. Но нет ничего, что действительно решает нам, что такое телефон и что такое планшет. С телефонами иногда 7 дюймов в высоту, и некоторые планшеты, предназначенные как только электронные читатели и такие, они действительно могут быть любой плотности или размера.

Однако таблица, предложенная Santacrab выше, может использоваться вместе с использованием соответствующих атрибутов макета, которые будут соответствующим образом изменяться независимо от размера экрана. Конечно, будут обстоятельства, когда имеет смысл использовать фрагменты для разделения экранов и на меньшем экране, чтобы избежать перенаселенности экрана, но ссылки, которые отходят от ссылки от Santacrab, также должны содержать некоторые полезные рекомендации.

6

В режиме onCreate активности проверьте, работает ли приложение на телефоне или на планшете. Если приложение работает с ориентацией экрана на экране телефона, только для портрета.

Добавьте эти файлы в свою папку res.

Рез/значения/vars.xml:

<?xml version="1.0" encoding="utf-8"?><resources><bool name="is_tablet">false</bool></resources> 



Рез/значения-sw600dp/vars.xml:

<?xml version="1.0" encoding="utf-8"?><resources><bool name="is_tablet">true</bool></resources> 

В методе OnCreate выключено все ваши Активности добавьте этот код:

if (!getResources().getBoolean(R.bool.is_tablet)) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    }