2011-04-01 9 views
1

私のアプリには、アイコン付きのボタンがあります。このアイコンは、drawable-ldpi-v4 /、drawable/and drawable-hdpi-v4 /の3つの密度のPNGイメージとして提供されます。各アイコンはのImageButtonに表示されImageButton/ImageViewにアイコンを変更せずに表示する方法は?

Original icons

<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では、1つのアイコンが壊れてしまい、Android 1.6 MDPIとAndroid 2.1 HDPIの両方で、アイコンの下に余分な行がランダムに追加されているようです)。マニフェストで

Rendered icons

supporting multiple screens in legacy appsについてのドキュメントで推奨されているように、私は空<supports-screens />を持っています。追加すると、anyDensity="true"は役に立ちません。

明らかに、フロイオのように、上の画像でわかるように、物事は良くなっています。しかし、どうすればこの問題をAndroidで解決できますか?< = 2.1?

+0

をバックグラウンドで設定する代わりに、スケーリングを避けるためにソースに配置する必要があります。 – Varun

+0

アイコンはバックグラウンドではなく、srcにあります。 – olivierg

答えて

2

私はボタンの明示的なサイズ(ディップとして表現されている場合でも)を使用しないでくださいが、システムがあなたのためにそれをするようにしてください。

使用

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

また、それはあなたがドキュメントは、彼らが同義であると言うが、「ディップ」を使用して作られた他の人が報告している「DP」トラップ対「ディップ」、に落ちていることもありスタッフは意図どおりに動作します。

+0

アイコンを中心に固定サイズにするには、ボタン(背景)が必要です。ボタンのサイズに問題はありません。私はボタンのサイズではなく、変更されたアイコンについて話しています。 – olivierg

+0

申し訳ありませんが、私はこれを回避策と考えていますが、うまくいきます。固定ボタンサイズを取得するために、すべてのPNGにいくつかのパディングを追加しました。これにより、各アイコンは32x32dpになりました。実際、wrap_contentを使用すると、すべてのデバイスとバージョンでアイコンが正しく表示されます。ありがとう! – olivierg

0

この場合、このGoogle I/O talkに記載されているバグを実行していないかどうかは不明です。私はまだそれの周りに私の頭をラップする必要がありますが、あなたは1.5から2.0にプラットフォームをターゲットにしている場合は見ている価値があると思う。

関連する問題