質問を段階的に分割して、フォロー/回答が容易になるようにします。
ステップ 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) で割った値になります)、レイアウトの高さをその半分になるように動的に設定します。多くの作業が必要ですが、私はそれがこれを行う方法だと思いますか?