1

我将逐步解决我的问题,以便更容易理解/回答。

第 1 步:根据Android 开发者指南,“与密度无关的像素相当于 160 dpi 屏幕上的一个物理像素”。这意味着在具有 233 dpi 的 Galaxy S 上,1 dp 等于 1.46 个物理像素 (233/160)。

第 2 步:鉴于 Galaxy S 的分辨率为 480x800,这意味着其屏幕高度为 548dp(800 物理像素除以 1.46)。因此,如果我将我创建的 LinearLayout 的高度设置为 274dp,它将恰好占据屏幕的一半。我测试过,它有效。

第 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 和屏幕分辨率。然后让我的应用程序以 DPs 计算屏幕的总大小(这将是分辨率除以(设备的 dpi/160),然后将布局的高度动态设置为其中的一半。很多工作,但是我想这是这样做的方法吗?

4

2 回答 2

1

使用一个LinearLayout包含一个空的View,然后是你的真实内容,然后是另一个空View。将空视图设置为android:layout_height="0dp" android:layout_weight="1"并将您的内容设置为android:layout_height="0dp" android:layout_weight="2"。现在封闭LinearLayout将给你的内容一半的高度,在屏幕的中心,而空视图的另一半(在它们之间平均分割)。如果您希望您的内容仅位于屏幕的上半部分(或下半部分),而不是中心,请删除其中一个空视图并使用android:layout_weight="1".

如果您尝试使事物相对于屏幕适合,请始终使用这样的结构。您应该只dp对较小的固定尺寸(如边距或图标高度)使用测量值。

于 2013-07-29T14:25:13.153 回答
0

在星系 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 回答