我会逐步分解我的问题,以便更容易理解/回答。
第 1 步:根据 Android Developer Guide ,“与密度无关的像素相当于 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 和屏幕分辨率。然后让我的应用程序以 DP 为单位计算屏幕的总尺寸(分辨率除以(设备的 dpi/160),然后将布局的高度动态设置为它的一半。很多工作,但是我猜这是执行此操作的方法?
最佳答案
使用 LinearLayout
包含一个空的 View
,然后是你的真实内容,然后是另一个空的 View
.将空 View 设置为 android:layout_height="0dp" android:layout_weight="1"
和你的内容到android:layout_height="0dp" android:layout_weight="2"
.现在封闭 LinearLayout
将为您的内容提供一半的高度,位于屏幕中央,另一半为空 View (在它们之间平分)。如果您只想将内容显示在屏幕的上半部分(或下半部分)而不是中心,请删除其中一个空 View 并使用 android:layout_weight="1"
.
如果您尝试使事物相对于屏幕适合,请始终使用这样的结构。你应该只使用 dp
测量较小的固定尺寸,例如边距或图标高度。
关于Android:可以在布局上使用 DP 并使其在不同设备上看起来相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979388/