Android Определите, следует ли использовать многофрагментную разметку - PullRequest
5 голосов
/ 27 декабря 2011

При создании приложений для Android 3.x вы можете просто проверить, было ли устройство в альбомной ориентации, чтобы увидеть, может ли оно соответствовать нескольким фрагментам рядом. Но это только потому, что вы были в основном гарантированы, что устройство является планшетом.

С введением библиотеки совместимости и Android 4.0 я не могу думать о том, что я считаю «хорошим» способом определить, могу ли я уйти с рядом стоящих фрагментов или должен вернуться к стандартному одному фрагменту на «экран».

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

Так что, если у кого-то есть идея, как легко и эффективно это проверить, пожалуйста, дайте мне знать!

Ответы [ 2 ]

6 голосов
/ 01 января 2012

Фактически вы можете увидеть тип размера экрана (маленький, нормальный, большой и т. Д.), Используя следующее:

getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK

Это вернет int, который вы можете проверить по любому из следующих:

Configuration.SCREENLAYOUT_SIZE_SMALL
Configuration.SCREENLAYOUT_SIZE_NORMAL
Configuration.SCREENLAYOUT_SIZE_LARGE
Configuration.SCREENLAYOUT_SIZE_UNDEFINED

Затем вы можете проверить ориентацию, используя

getResources().getConfiguration().orientation

Что будет соответствовать любой из следующих возможностей

Configuration.ORIENTATION_PORTRAIT
Configuration.ORIENTATION_LANDSCAPE
Configuration.ORIENTATION_SQUARE
Configuration.ORIENTATION_UNDEFINED

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

4 голосов
/ 29 декабря 2011

Я создаю 2 макета, один с одним контейнером (ViewGroup) для фрагмента, а второй макет имеет 2 контейнера рядом. Я использую структуру папок Android для ресурсов, чтобы указать, что сценарии, где я хочу многофрагментную (2 контейнера) макета. Затем в коде проверьте наличие второго контейнера, чтобы определить, являетесь ли вы мультипанелью или нет.

isMultipanel = false;
ViewGroup container2 = findViewById(R.id.container_2);
if (container2 != null) {
    isMultipanel = true;
}

Старайтесь не думать о нем, как о планшете или телефоне, но достаточно широко или недостаточно широко для 2 панелей.

Если бы я хотел использовать мультипанель на устройствах обычного размера (<= 5 ") и больших (5" - 7 ") только тогда, когда они в альбомной ориентации, но всегда на xlarge (> 7"), я бы поставил файл макета панели в:

  • макет-земля
  • макет большая земля
  • макет XLarge

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...