2013-07-09 2 views
0

Я знаю, что есть N потоков по этому вопросу, но я до сих пор не знаю, как применять ширину и высоту для виджетов (кнопок, изображений) на Android.Android: как рассчитать dp?

Я прочитал: http://developer.android.com/guide/practices/screens_support.html и многие другие темы, но я не понимаю.

Как я могу рассчитать dpi для кнопки?

Должен ли я знать dpi на устройстве? (Список Википедии): http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density

Но есть много других устройств с разным разрешением dpi!

У меня есть дизайн в Photoshop (800x480) и кнопка (290x65). Я сохранил и импортировал кнопку изображения во вновь созданной папке «drawable» в моем проекте Android. В XML (макет) я вставил ImageView с импортированным изображением кнопки.

<ImageView 
    android:id="@+id/btnNewImage" 
    android:layout_width="210dp" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginTop="7dp" 
    android:src="@drawable/new_image" /> 

Введенное изображение полностью отличается, оно намного больше. Как я могу рассчитать точные значения ширины и высоты для размеров Android?

+1

Заканчивать факторы масштабирования здесь: http://stackoverflow.com/a/11801140/833647 для ИПЧРА сделать это в 1,5 раза размера и место он в папке hdpi, для xhdpi делает его в 2 раза больше размера и т. д. –

+2

1dp = 1 пиксель при 160 dpi. На самой странице, на которую вы ссылаетесь, есть формула, которая объясняет преобразование пикселя dp <->. –

+1

Может помочь прочитать: http://developer.android.com/design/style/metrics-grids.html –

ответ

1

Если вам нужно знать точек на дюйм устройства, используйте следующий фрагмент кода:

int dpi = getResources().getDisplayMetrics().densityDpi; 

Если вы хотите конвертировать дп в пикселях:

int px = (int)(dp * getResources().getDisplayMetrics().density + 0.5f); 

Если вы хотите конвертировать пикселей до dp:

int dp = (int)(px/getResources().getDisplayMetrics().density + 0.5f); 
+0

Подождите, почему 0.5f? Это должно быть просто плотность и результат. – kcoppock

+1

Здесь можно округлить до ближайшего целого, а не просто округлять. ([Веб-сайт Android] (http://developer.android.com/guide/practices/screens_support.html#dips-pels) делает это и в своих образцах кода.) – Frxstrem

+0

Интересно. Узнавайте что-то новое каждый день. :) Я предполагаю, что это должно быть, по крайней мере, 1 px. – kcoppock

1

Чтобы получить изображение, которое отображается в нужном размере, его необходимо поместить в правильное "dra wable ". Например, если у вас есть значок размером 48x48 пикселей, он должен идти в drawable-mdpi. В идеале вы должны создать графику для каждой из папок, чтобы Android мог выбрать лучший из них на основе размера экрана и разрешения.

Я использую следующие рекомендации для своих икон (которые я почерпнул откуда-то теперь забытым); вы можете экстраполировать на них, чтобы выяснить, какие размеры пикселя вам нужно:

Recommended drawable sizes - to match size of launcher icon, about 3/8" 
36x36 - low 
48x48 - med 
72x72 - high 
96x96 - extra high 
Смежные вопросы