2013-03-21 2 views
2

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

Например, у меня есть разные макеты:

  • макет
  • макета sw600dp
  • макета sw720dp

Nexus 7" (800x1280) использует макет-sw600dp

Samsung GTp3100 7 "(600x1.024) использует layout-sw600dp

Tab Samsung 10,1 (1280x800) использует компоновщикам sw720dp

Sony XPERIA S 4.3 (1280x720) использует макет

Может вы, ребята, объясните "с вашими словами" почему не XPERIA S с помощью sw600dp или sw720dp? SW! = Наименьшая ширина? Столь маленький из XPERIA S - 720. Он должен использовать sw720 или sw600, правильно? Или я ошибаюсь?

Я прочитал тонны документации, но не могу понять, почему это происходит.

Большое спасибо.

ответ

5

Квалификатор наименьшей ширины относится главным образом к размеру экрана, а не к физическим пикселям.

Использование sw720dp, например, означает, что устройство должно иметь минимальную ширину экрана 720 dp (независимые от устройства пиксели) - это не около 720 физических пикселей. Из документации ...

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

Физическая ширина Sony XPERIA S 4.3 2.5" , но я не знаю, насколько это фактическая ширина экрана.

Давайте притворяться ради расчетов следует, что экран покрывает всю ширину ... в этом случае для расчета dpi для ширины мы просто используем 720/2.5 = 288dpi.

из документации dp ...

превращение дп у nits для пикселов экрана просто: px = dp * (dpi/160).

Преобразуя формулу выше, чтобы вычислить dp мы делаем это ...

dp = px/(dpi/160) 

... это дает нам ширину в dp (и необходимый Наименьший ширины спецификатор) из ...

720/(288/160) = 400dp 

Вкратце ответ, то Sony Xperia S 4.3 может иметь экран высокой плотности (для его размера), но это не является большой экран.

+0

спасибо. Удалось найти это с помощью этого кода: 'float density = getResources(). GetDisplayMetrics(). Плотность; float dpHeight = outMetrics.heightПиксели/плотность; float dpWidth = outMetrics.widthPixels/density; ' Кстати, есть ли какая-либо формула для получения этого значения« 2.5 », то же самое я получаю с помощью' getResources(). GetDisplayMetrics(). Плотность; '? – Reinherd

+0

@ SergiCastellsaguéMillán: вы можете использовать поля 'xdpi' и' ydpi' 'DisplayMetrics' для получения фактического' dpi' для каждого измерения. Вычисление физического размера экрана было бы просто повторной компоновкой формулы, которую я использовал для вычисления «dpi» в моем ответе (например, '720/2.5 = 288 dpi", который равен 'px/size = dpi'), поэтому' px/dpi = размер'. Из 'DisplayMetrics' вы будете использовать' widthPixels/xdpi', чтобы получить физическую ширину экрана. – Squonk

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