2015-06-16 3 views
0

Я изучаю, как использовать «минимальную ширину dp» для поддержки разных экранов с помощью this в android.Путаница в «наименьшей ширине dp» в Android

Я получаю, что под номером наименьшая часть устройства в dp.

Типичные числа для ширины экрана дп являются:

320: экран телефона (240х320 ldpi, 320х480 MDPI, 480х800 ИПЧР, и т.д.).

480: таблетка для tweener, как полоса (480x800 mdpi).

600: 7-дюймовый планшет (600x1024).

720: 10-дюймовый планшет (720x1280, 800x1280 и т. Д.).

Согласно this сообщение nexus 6 имеет 730 x 410 дп.

Нексус 6 имеет впечатляющий 5,96” дисплей экран Quad HD с разрешением в 2560 х 1440 (493 PPI). Это означает ~ 730 x 410 dp (независимые от плотности пиксели).

, но, как описано в this

  dp = (px/dpi)*160 
       = (1440/493)*160 
       = ~467 

то как же это приводит к 730 х 410 дп? еще раз, когда я запускаю демонстрацию в шестерке 6, устройство использует размер прокладки, определенный под res/values-sw320dp/dimens.xml

это меня смущает. как реально вычислять dp и создавать представление соответственно с помощью «наименьшей ширины dp»?

кроме res/values-sw320dp У меня есть res/value и res/values-sw600dp, у которого dimens.xml под ним.

ОБНОВЛЕНИЕ выяснено мое замешательство. проверка комментарий в разделе вопрос.

+1

проверка [ это] (http://stackoverflow.com/questions/16105032/confusion-with-smallest-width-600-dp-selector) ... это может помочь u – Biplab

+0

Я понял это с помощью этого. [Ссылка] (http://stackoverflow.com/questions/30041594/how-does-quantized-density-affect-image-resource-selection-and-scaling). dp рассчитывается путем квантованной плотности, а не физической плотности. поэтому 730 x 410 dp для nexus 6 является правильным. – Ankit

+0

И sw320dp часть путаницы была моей ошибкой в ​​понимании. res/values-sw320dp используется, потому что определено следующее bucket: res/values-sw600dp, который, очевидно, больше, чем 410 (минимальная сторона, если nexus 6). – Ankit

ответ

2

Вы можете получить правильные значения с помощью следующего кода:

DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics(); 
    float dpHeight = displayMetrics.heightPixels/displayMetrics.density; 
    float dpWidth = displayMetrics.widthPixels/displayMetrics.density; 
    Log.d("dpHeight-----",String.valueOf(dpHeight)); 
    Log.d("dpWidth------",String.valueOf(dpWidth)); 

Например, для Xperia Z 1080x1920px значения являются x592dp, настройки является значения-sw360dp

+0

да, это дает правильные значения. DisplayMetrics.density используется для масштабирования ресурсов, зависящих от квантованной плотности. – Ankit