В моем приложении у меня есть кнопки со значками. Значки представлены в виде изображений PNG в трех плотностях в drawable-ldpi-v4/, drawable/и drawable-hdpi-v4/. Здесь образец:
Каждый значок отображается в 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 добавляется дополнительная строка в нижней части значка (смотрите внимательно).
В манифесте у меня есть пустой <supports-screens />
, как рекомендовано в документах поддержка нескольких экранов в старых приложениях. Добавление anyDensity="true"
не помогает.
По-видимому, с Froyo все становится лучше, как вы можете видеть на изображении выше. Но как я могу решить эту проблему на Android <= 2.1?
Я думаю, что вы не должны использовать явные размеры (даже если они выражены как dip) для кнопок, но пусть система сделает это за вас.
Используйте
<ImageButton android:id="@+id/SpeakButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Также возможно, что вы попадаете в ловушку "dip" и "dp", о которой сообщали другие, где документация говорит о том, что они являются синонимами, но использование "dip" сделанных материалов работает по назначению.
Не уверен, что это так, но вы можете проверить, не попали ли вы в ошибки, упомянутые в этом Google I/O talk. Мне все равно приходится обнимать его вокруг, но я думаю, что стоит посмотреть, ориентированы ли вы на платформы с 1.5 до 2.0.