Я использую скин WVGA800 в эмуляторе Android, поэтому плотность (hw.lcd.density) равна 240. Мне нужно поместить 4 кнопки изображения (72 пикселя на дюйм) внизу экрана действий. Поскольку разрешение 480х800, я предположил, что ширина изображения должна быть 120 пикселей. Проблема в том, что при запуске приложения 3 кнопки занимают всю ширину и нет места для 4-й кнопки... Затем я создал изображение кнопки в Fireworks с разрешением 240 пикселей на дюйм и шириной 120 пикселей, но проблема остается. Может ли кто-нибудь объяснить, как сделать правильные рисунки (размеры и dpi), чтобы они могли отображаться пиксель в пикселе на Android?
Android, изображения и dpi
Ответы (3)
Если вы поместите свои изображения в res/drawable
, Android предполагает, что они имеют разрешение 160 точек на дюйм, и соответствующим образом масштабирует их для разных разрешений.
Вы можете либо поместить изображения кнопок в res/drawable-hdpi
, сигнализируя, что они предназначены для плотности около 240 точек на дюйм, либо в res/drawable-nodpi
, чтобы они никогда не масштабировались независимо от текущей плотности экрана.
Вы по-прежнему ссылаетесь на них как @drawable/whatever
в макетах, движок автоматически выбирает наилучшее совпадение.
Полностью игнорируйте 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, независимо от разрешения.
Ширина на самом деле 320 пикселей, поэтому для 4 кнопок на весь экран установите каждую на 80dip. Затем Android настроит ваши независимые от плотности пиксели на правильный размер экрана 480 пикселей.