Android, изображения и точек на дюйм

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

3 ответа

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

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

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

Не обращайте внимания на изображение DPI полностью. Это не имеет значения, все, что вам нужно знать, это размер пикселя. На самом деле я бы предложил создать изображение NinePatch для использования в качестве фона кнопки. На самом деле вам понадобится несколько элементов для включения в StateListDrawable, так как именно так определяются различные состояния фокуса (например, Pressed, Focused). Когда у вас есть 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 пикселей.

Другие вопросы по тегам