2010-11-22 13 views
2

AndroidエミュレータでWVGA800スキンを使用しているので、密度(hw.lcd.density)は240です。アクティビティビューの下部に4つの画像ボタン(72ピクセル/インチ)を配置する必要があります。解像度は480X800なので、画像の幅は120ピクセルにする必要があります。問題は、アプリケーションが起動され、3つのボタンがすべての幅を持ち、4番目のボタンの場所がない場合です。次に、解像度240ピクセル/ 120pxのFireworksでボタン画像を作成しましたが、問題は残ります。誰かが正しいdrawable(サイズとdpi)を作る方法を説明して、Android上のピクセルでピクセルを表示できるようにしましたか?Android、画像、dpi

答えて

0

実際には幅が320ピクセルなので、画面全体の4つのボタンはそれぞれ80dpiに設定されています。 Androidは、密度に依存しないピクセルを480ピクセルの適切な画面サイズに調整します。

+0

800X480デバイスがレイアウトで使用されていると書いていたように、4つのボタン(72ピクセル/ cmのリソースを持つImageButton、Fireworks CS5の標準解像度、Photoshopも信じています)は幅120ピクセルです。 pxがdpに置き換えられた場合、私の4番目のボタンのスペースがなくなり、すべてのボタンが伸びてぼやけていました。 1pxは1dpではありません!したがって、dpを使うには、pxを1.5で割る必要があります。たとえば、画像が60pxの場合、レイアウトで40dpを使用する必要があります。このアプローチは、低解像度のデバイス、例えばHTCの猛烈な火事でも機能します。私のImageButtonは正しくサイズ変更されました。 – StevenR

1

イメージDPIは完全に無視してください。それは無関係なもので、ピクセルサイズだけ知る必要があります。私が実際に提案するのは、ボタンの背景として使用する画像をNinePatchにすることです。 StateListDrawableに入れるには、実際にはいくつかのフォーカス状態が定義されています(例:押しつけられ、フォーカスされている)。

<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にすべてのボタンを設定し、それらをすべて同じ重みを与える:あなたのNinePatchを持っていたら、ちょうどそうは次のようにのLinearLayoutを作成します。親に均等にフィットするようにストレッチします。一定のピクセルやディップサイズを指定することについては、まったく心配する必要はありません。また、解像度にかかわらず、すべてのAndroid搭載端末に均等に分割されます。

+0

1)私はWVGA800の解像度が800X480(高さ×幅)であることを理解しています。また、この解像度は、HTC Desire仕様(私のテスト環境)にも反映されています。 4で割った480は120なので、各ボタンは120ピクセル幅でなければなりません。どのように480を320にすることができますか(本当に私の場合、4番目のボタンにはスペースがありません)? 2)画像にグラデーションが含まれているので、ストレッチを避けようとしています。私は、少なくとも私の好みの解像度のためにピクセルで完璧なピクセルを達成したいです。 誰かがこのテーマについてより多くの情報を提供できますか? – StevenR

+0

320ピクセルのコメントは私のものではありませんでした。理論的には、ボタンは120ピクセルでなければなりませんが、それらの間のパディングも考慮してください。また、ユーザーが横向きに回転するとどうなりますか?あなたは9パッチの画像でグラデーションを扱うことができます。ちょっとややこしいです。 9パッチに関する詳細は次のとおりです。http://forum.xda-developers.com/showthread.php?t=580351 – kcoppock

4

res/drawableに画像を置くと、Androidは160dpiの画像であると想定し、解像度に合わせて拡大/縮小します。

ボタン画像をres/drawable-hdpiに入れて、240dpi前後の濃度を表示するか、またはres/drawable-nodpiに入れて、現在の画面密度に関係なく拡大することはできません。

レイアウトではまだ@drawable/whateverと表示されていますが、エンジンは自動的に最適なマッチを選択します。

関連する問題