1

質問を段階的に分割して、フォロー/回答が容易になるようにします。

ステップ 1: Android デベロッパー ガイドによると、「密度に依存しないピクセルは、160 dpi 画面上の 1 つの物理ピクセルに相当します」。これは、233 dpi の Galaxy S では、1 dp が 1.46 物理ピクセル (233/160) に等しいことを意味します。

ステップ 2: Galaxy S の解像度が 480x800 の場合、画面の高さは 548 dp (800 物理ピクセルを 1.46 で割った値) になります。したがって、作成する LinearLayout の高さを 274 dp にすると、ちょうど画面の半分になります。テストしましたが、動作します。

ステップ 3: Galaxy S3 には 306 dpi があるため、そのデバイスでは 1dp = 1.9125 物理ピクセル (306/160) になります。解像度が 720x1280 であるため、画面の高さは 670dp (1280/1.9125) です。繰り返しますが、約 335 で LinearLayout を作成すると、画面の半分が使用されます。テストして動作しました。

質問: 密度に依存しないピクセルを使用して、Galaxy S と Galaxy S3 の両方で画面の半分を占める LinearLayout を作成するにはどうすればよいですか? 274dp を使用すると、S でのみ画面の半分が使用され、その逆も同様です。または、私の計算はどのステップでも間違っていますか?

更新:考えてみると、次のアイデアを思いつきました。「ScreenMetrics」を使用して、デバイスのdpiと画面解像度の両方を取得します。次に、アプリで画面の合計サイズを DP で計算し (解像度を (デバイスの dpi/160) で割った値になります)、レイアウトの高さをその半分になるように動的に設定します。多くの作業が必要ですが、私はそれがこれを行う方法だと思いますか?

4

2 に答える 2

1

LinearLayoutempty を含むa を使用しView、次に実際のコンテンツを使用し、次に別の emptyを使用しますView。空のビューをandroid:layout_height="0dp" android:layout_weight="1"に、コンテンツをに設定しますandroid:layout_height="0dp" android:layout_weight="2"。これで、LinearLayoutコンテンツの高さが画面の中央に半分になり、空のビューが残りの半分になります (それらの間で均等に分割されます)。コンテンツを画面の中央ではなく上半分 (または下半分) のみに表示する場合は、空のビューの 1 つを削除して を使用しますandroid:layout_weight="1"

画面に合わせて物を合わせようとしている場合は、常にこのような構造を使用してください。dp余白やアイコンの高さなど、小さい固定サイズの測定値のみを使用する必要があります。

于 2013-07-29T14:25:13.153 に答える
0

galaxy S では、dp は 1.5 です。

ldpi: 1dp = 0.75px
mdpi: 1dp = 1px
hdpi: 1dp = 1.5px
xdpi: 1dp = 2dp

実際の px は `(int)(density * x + 0.5) になります

あなたはでdpを得ることができます

getResources().getDisplayMetrix().density.
于 2012-08-16T01:14:21.140 に答える