Как отображать значки без изменения в ImageButton / ImageView? - PullRequest
1 голос
/ 01 апреля 2011

в моем приложении у меня есть кнопки с иконками. Значки предоставляются в виде изображений PNG в трех плотностях в drawable-ldpi-v4 /, drawable / и drawable-hdpi-v4 /. Вот образец:

Original icons

Каждый значок отображается в ImageButton:

<ImageButton style="@style/Shortcut" android:id="@+id/open_button"
        android:src="@drawable/shortcut_open" android:layout_marginRight="4dp"/>

Где стиль Shortcut:

<style name="Shortcut">
    <item name="android:layout_width">65dp</item>
    <item name="android:layout_height">45dp</item>
    <item name="android:scaleType">center</item>
    <item name="android:background">@drawable/shortcut_background</item>
</style>

Однако на некоторых версиях устройств / платформ некоторые значки могут быть изменены, размыты или что-то в этом роде. Я не уверен, что это масштабирование, это больше похоже на ошибку рендеринга, я думаю. Я пытался отключить сглаживание в BitmapDrawable, но это не помогло.

Как показано на рисунке ниже, в Android 2.1 LDPI один значок обрывается / обрезается, а в Android 1.6 MDPI и Android 2.1 HDPI кажется, что в нижней части значка случайно добавляется дополнительная строка (посмотрите внимательно) .

Rendered icons

В манифесте у меня есть пустой <supports-screens />, как рекомендовано в документах о , поддерживающем несколько экранов в старых приложениях . Добавление anyDensity="true" не помогает.

Очевидно, что с Froyo дела идут лучше, как вы можете видеть на изображении выше. Но как я могу решить эту проблему на Android <= 2.1? </p>

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Я думаю, что вы не должны использовать явные размеры (даже если они выражены как dip) для кнопок, но пусть система сделает это за вас.

Используйте

    <ImageButton android:id="@+id/SpeakButton"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"

Также это можетбудь то, что вы попадаете в ловушку «провал» против «дп», о которой сообщали другие, где документация говорит, что они синонимичны, но при использовании «провала» все работает как задумано.

0 голосов
/ 02 апреля 2011

Не уверен, что это так, но вы можете проверить, не сталкиваетесь ли вы с ошибками, упомянутыми в этом Google I / O talk .Я все еще должен обернуть голову вокруг этого, но я думаю, что стоит взглянуть, если вы ориентируетесь на платформы от 1,5 до 2,0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...