Android, изображения и точек на дюйм - PullRequest
2 голосов
/ 22 ноября 2010

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

Ответы [ 3 ]

5 голосов
/ 25 января 2011

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

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

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

1 голос
/ 22 ноября 2010

Полное игнорирование изображения 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 голосов
/ 22 ноября 2010

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

...