2010-11-22 2 views
2

Я использую скин WVGA800 в эмуляторе Android, поэтому плотность (hw.lcd.density) составляет 240. Я должен положить 4 кнопки изображения (72 пикселя на дюйм) внизу представления активности. Поскольку разрешение 480X800, я подсказал, что ширина изображения должна быть 120 пикселей. Проблема заключается в том, когда приложение запущено, 3 кнопки занимают всю ширину, и нет места для 4-й кнопки ... Затем я создал изображение кнопки в Fireworks с разрешением 240 пикселей на дюйм и шириной 120 пикселей, но проблема остается. Может ли кто-нибудь объяснить, как сделать правильные чертежи (размеры и dpi), чтобы они отображались в пикселях на Android?Android, изображения и dpi

ответ

0

Ширина на самом деле составляет 320 пикселей, поэтому для 4 кнопок по всему экрану каждый из них равен 80dip. Затем Android отрегулирует ваши независимые от плотности пиксели до необходимого размера экрана 480 пикселей.

+0

Как я писал, если устройство 800X480 используется с макетом, где находятся 4 кнопки (ImageButton с ресурсами в 72 пикселя/см, стандартное разрешение в Fireworks CS5 и я также верю в Photoshop), каждая ширина 120 пикселей. Если px заменяется на dp, тогда не было места для моей 4-й кнопки, и все кнопки были растянуты и размыты. Существует только одно объяснение: 1px IS NOT 1dp !!! Поэтому, чтобы использовать dp, вам нужно разделить px на 1.5. Например, если мое изображение 60 пикселей, я должен использовать 40dp в макете. Этот подход работает также и в устройствах с более низким разрешением, например, в HTC Wildfire - мои ImageButtons были правильно изменены. – StevenR

1

Пренебрежение изображением DPI полностью. Это не имеет значения, все, что вам нужно знать, это размер пикселей. Я бы на самом деле предложил создать изображение NinePatch для использования в качестве фона кнопки. Вам действительно понадобятся несколько, чтобы ввести в StateListDrawable, так как это определение различных состояний фокусировки (например, нажатие, фокусировка). Если у вас есть NinePatch, просто создать LinearLayout так:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 1" 
     android:layout_weight="1" 
    /> 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 2" 
     android:layout_weight="1" 
    /> 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 3" 
     android:layout_weight="1" 
    /> 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 4" 
     android:layout_weight="1" 
    /> 
</LinearLayout> 

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

+0

1) Как я понимаю, разрешение WVGA800 составляет 800X480 (высота x ширина). И эта резолюция также упоминается в спецификации HTC Desire (мой тест env). 480 diveded by 4 равно 120, поэтому каждая кнопка должна быть 120 пикселей в ширину. Как 480 может быть 320 (если так, то действительно в моем случае нет места для 4-й кнопки)? 2) Я стараюсь избегать «растяжения», так как мои изображения содержат градиенты, и после растяжения они выглядят размытыми; поэтому insted «растяжения» Я хочу достичь идеального пикселя в пикселе, по крайней мере, для одного моего предпочтительного разрешения. Может ли кто-нибудь предоставить дополнительную информацию по этому вопросу? – StevenR

+0

Комментарий 320 пикселей не был моим. Теоретически ваши кнопки должны быть 120 пикселей, но имейте в виду и прокладку между ними, плюс, что происходит, когда пользователь поворачивается в альбомную ориентацию? Вы можете обрабатывать градиенты с 9-патч-изображениями, это немного немного сложнее. Вот еще одна информация о 9-патчах: http://forum.xda-developers.com/showthread.php?t=580351 – kcoppock

4

Если вы разместите свои изображения в res/drawable, Android предполагает, что они предназначены для 160dpi и соответственно масштабируют их для разных разрешений.

Ваши варианты - либо поставить изображения кнопок в res/drawable-hdpi, сигнализируя, что они предназначены для плотностей около 240 точек на дюйм, либо в res/drawable-nodpi, чтобы они никогда не масштабировались независимо от текущей плотности экрана.

Вы все еще ссылаетесь на них как @drawable/whatever в макетах, двигатель выбирает наилучшее соответствие автоматически.