2013-10-08 3 views
8

Я новичок в разработке приложений для планшетов. У меня есть Google Nexus7 с разрешением экрана (600 * 960 dip). Итак, я хочу знать, что он попадает в категорию mdip? В соответствии с этим 1px = 1dp (базовый уровень). Но если я последую этому, это не выглядит хорошо на планшете. Я создаю отдельную папку макета для nexus7 -sw600dp и упоминаю размеры в соответствии с mdip, но он не работает. Мои изображения тоже не выглядят хорошо. Что я хочу знать, что такое фактический коэффициент конверсии для google nexus 7. Нужна помощь.Преобразование из px в dp для Google nexus 7

+1

используют эту ссылку, это поможет: HTTP: //www.xcubelabs.com/dpi/index.html –

ответ

13

формула: pixels = dips * (density/160)

Нексус 7 800x1280 с плотностью в 213 пикселей, что означает, что разрешение кода является tvdpi (что означает, что вы можете иметь папку с именем drawable-tvdpi).

Вы можете измерить доступный размер экрана, минус окно украшения с:

this.getResources().getConfiguration().screenWidthDp; 
this.getResources().getConfiguration().screenHeightDp; 

На мой N7, он возвращает 600 дп ш, 888 дп час. Следуя приведенной выше формуле, высота 888 dp составляет 1280px - оформление окна.

+0

спасибо за помощь. вы имеете в виду, если я хочу определить макет с 50px, тогда эквивалентный dp будет 'dp = (50/213) * 160' справа? – nilkash

+0

Это правильно. Если это помогло, пожалуйста, отметьте вопрос как решенный. Благодаря! –

3

Nexus7 - уникальное устройство с несколько странным дизайном.

для Nexus 7

layout-large-hdpi 

Вот очень хорошее объяснение (с Дианой Hackborn - андроидом инженер Google): Dianne Hackborn explains the unique resolution of the Nexus7

Примечание: приложение принимает изображения из этих папок только тогда, вы не получили более высокие квалификаторы. Например, если вы указали папку макета, такую ​​как layout-sw360dp, приложение будет принимать только изображения из этой папки, даже если вы предоставили отдельные макеты, подобные тому, что я сказал выше. Потому что в android есть порядок приоритета, в котором вы должны давать макеты.

экрана Плотность

обычно упоминается как точек на дюйм (точек на дюйм). Android группирует все фактические плотности экрана в четыре обобщенные плотности: низкий (120), средний (160), высокий (240) и сверхвысокий (320). Устройство, такое как Galaxy Nexus, имеет «сверхвысокую» плотность экрана (более конкретно, значение dpi задано на 320). Nexus 7 использует «tvdpi» - то есть 213 dpi.

Density Независимый Pixel

Обычно называют дп. Это элемент виртуального пикселя, используемый при показе контента. Независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм. Для расчета дп использовать следующую формулу:

px = dp * (dpi/160) 

или, что эквивалентно:

dp = (px/dpi) * 160 

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

Галактики Nexus (320 точек на дюйм, 720 пикселей в ширину)

(720/320) * 160 = 360 dp 

Nexus 7 (213 точек на дюйм, 800 пикселей в ширину)

(800/213) * 160 = 600 dp 

Это означает, что, когда приложения оказывают на Galaxy Nexus, ширина экрана фактически равна 360 дп (отображается с использованием 720 пикселей). В то время как на Nexus 7 ширина экрана составляет 600 дп (отображается с использованием 800 пикселей).

+0

@GrlsHu благодарю вас за помощь. Согласно вашему решению, если я хочу определить макет с 50px, тогда эквивалентный dp будет 'dp = (50/213) * 160' справа? – nilkash

+0

Да, правильно, что будет расчет dp. – GrIsHu

1

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

public int convertSizeToDeviceDependent(int value) { 
      DisplayMetrics dm = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(dm); 
      return ((dm.densityDpi * value)/160); 
     }