Связь между методом getWidth() в классе Display и макетом XML в Android

Согласно документации Android по поддержке экрана, они описали следующее:

  • большие экраны имеют разрешение не менее 960 x 720 dp
  • большие экраны имеют разрешение не менее 640 x 480 dp
  • обычные экраны имеют разрешение не менее 470 x 320 dp
  • маленькие экраны имеют разрешение не менее 426 x 320 dp

У меня есть фрагмент кода следующим образом;

Display display = getWindowManager().getDefaultDisplay();
int displayWidth = display.getWidth();

Мне нужно получить представление о диапазоне значений для макетов XML, который связан с выводом displayWidth.

Например, я хочу получить такой ответ;

если 0 ‹ displayWidth ‹ 320, это маленькие экраны

Вышеприведенная фраза может быть неправильной, я просто видел пример.

Кроме того, у нас могут быть такие каталоги, как layout, layout-small, layout-large, layout-xlarge и layout-xlarge-land в каталоге res. Итак, какая displayWidth применима для этих макетов.

В качестве примера, как указано выше;

if 0 ‹ displayWidth ‹ 320 для layout-small

Спасибо.


person AnujAroshA    schedule 12.06.2012    source источник


Ответы (3)


Я думаю, что лучше рассчитать длину диагонали экрана, как показано ниже.

DisplayMetrics  displayMetrics = getResources().getDisplayMetrics();
    double screen_phys_width  = (double)displayMetrics.widthPixels / displayMetrics.xdpi;
    double screen_phys_height = (double)displayMetrics.heightPixels / displayMetrics.ydpi; 
    screen_diagonal = Math.sqrt(screen_phys_width * screen_phys_width + screen_phys_height * screen_phys_height);
person MckyONeil    schedule 12.06.2012
comment
Почему я должен вычислять длину диагонали? Можете ли вы дать мне соотношение для длины диагонали и макетов XML, как я описал в своем вопросе? - person AnujAroshA; 12.06.2012

Если ваша цель состоит в том, чтобы узнать, какой макет из макетов в layout-small или layout-large и т. д. будет использоваться, вы можете использовать этот прием. Вы можете иметь представление с исчезнувшей видимостью и добавить к этому виду тег, указывающий, какой это вид макета.

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

Документация Android дает вам информацию о том, что для такого-то размера экрана будет использоваться соответствующий тип макета. Теперь ваше дизайнерское решение — написать разные макеты для разных размеров экрана.

person Prakash Nadar    schedule 26.07.2012

person    schedule
comment
Да... Мне нужно знать, к каким XML-макетам они будут обращаться в каждом предложении if, как вы описали. Я имею в виду, что если высота = 48, а ширина = 320, то программа получит доступ к макету-крупному или что-то в этом роде. - person AnujAroshA; 12.06.2012
comment
Спасибо за ответ. Но есть две проблемы, которые я вижу здесь. Во-первых, когда вы работаете с одним и тем же устройством, значения getWidth() и getHeight() меняются, если происходит вращение. Вот почему я искал диапазон, а не прямое значение. Следующая проблема заключается в том, что когда я проверяю несколько созданных эмуляторов, я получаю 752 в качестве значения getHeight() и 1280 для значения getWidth(). Потом снова возникает та же проблема. То есть нужен диапазон, а не определенное значение. Если вы можете перейти по этой ссылке, они описывают 5 различных макетов XML. - person AnujAroshA; 12.06.2012
comment
да, Ануджа.. для ландшафта вам нужно создать layout-land, layout-small-land, layout-large-land, layout-xlarge-land для разных экранов... но у меня нет идеи о 752 и 1280, исследуйте это, если вы получите это, пожалуйста, попробуйте опубликовать это - person Kalai Selvan.G; 12.06.2012