Как отображать значки без изменения в ImageButton / ImageView?

1

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

Изображение 174551

Каждый значок отображается в 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 добавляется дополнительная строка в нижней части значка (смотрите внимательно).

Изображение 174551

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

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

  • 0
    вместо того, чтобы устанавливать его в фоновом режиме, вы должны поместить его в источник, чтобы избежать масштабирования.
  • 0
    Значки не на заднем плане, они в src.
Теги:
image
icons

2 ответа

2
Лучший ответ

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

Используйте

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

Также возможно, что вы попадаете в ловушку "dip" и "dp", о которой сообщали другие, где документация говорит о том, что они являются синонимами, но использование "dip" сделанных материалов работает по назначению.

  • 0
    Мне нужно, чтобы кнопки (фон) имели фиксированный размер с иконкой в центре. И нет проблем с размером кнопки. Я имею в виду изменение значков, а не размер кнопки.
  • 0
    Хорошо, я считаю, что это обходной путь, но он работает. Чтобы получить фиксированный размер кнопки, я добавил некоторые отступы во все PNG, так что теперь каждый значок имеет размер 32x32dp, плюс некоторые дополнительные отступы в стиле. И теперь действительно, используя wrap_content, значки отображаются правильно на всех устройствах и версиях. Спасибо!
0

Не уверен, что это так, но вы можете проверить, не попали ли вы в ошибки, упомянутые в этом Google I/O talk. Мне все равно приходится обнимать его вокруг, но я думаю, что стоит посмотреть, ориентированы ли вы на платформы с 1.5 до 2.0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню