QVGA, HVGA, WVGA, など
HT-03A は HVGA, tatto は QVGA, Nexus One は WVGA です。
で、sdk version 4 からは、
multi screen 対応を manifest に書かないと
マーケットに出てこなかったりします。
ということで、以下を manifest に書けばOKです。
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4 " />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
・anyDensity について
名前のとおり、これが true ということは、「any density = すべての解像度にコード側で(自分で)対応するなり、layoutフォルダを画面サイズごとに用意するなり、drawable フォルダを解像度ごとに用意するなりしていますよ」という意味です。
なので、Layoutparams や setTextSize などコードで指定した pixel size がそのまま表示されます。setWidth(10) は 10px で表示されます。つまり、解像度の高い端末の方が低い端末よりも小さく表示されます。
ただし、XMLの方で dp や sp で指定すると解像度が異なる端末でも同じ表示になるはずです。
つまり、コード側で setWidth(10) とした場合と、XMLで android:layout_width="10dip" とした場合の大きさは端末によって違います。
160 dpi の画面で 1 dip = 1 px なので、160 dpi の端末なら、同じ大きさになるということです。
一方、「anyDensity = false というのは、そいういう対処をしていないので、コード側で設定しているピクセル値を解像度に応じて調整してください」ということです。 この場合、コード側で setWidth(10) とした場合と XMLで android:layout_width="10dip"とした場合の大きさは端末の解像度によらず同じになります。
ただし、Xperia では anyDensity = false にすると、drawable-hdpi ではなく drawable-mdpi に格納した画像が使われるという問題があります。
ということで、私は anyDensity = true にして、XML側で sp や dip でサイズ指定し、コード側で指定しなければならない場合は、XMLで dimension を設定して、それを getDimension してsetWidth などに渡しています。
他人の作ったソースをいじっているのですが
返信削除anyDensity=falseの設定に気づかず、
レイアウトが思った通り動かなくて悩んでいました。
おかげ様で助かりました。