Android:可以在布局上使用 DP 并使其在不同设备上看起来相同吗?

标签 android

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

第 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/

相关文章:

php - AsyncTask Android 中的 Http 请求

android - 在 Android MediaPlayer 中播放 AES 加密流?

java - 为什么 BroadcastReceiver 可以在应用关闭时接收到 intent?

java - 无法卸载应用程序,因为它没有显示

onConfigurationChange 方法中的 Android 语言更改

android - Android 上的路线 API

Android:我可以在 AsyncTask 中使用通用返回类型吗 - doInBackGround

android - Recycler View 中的 Intent ?

android - 有时会抛出 Uncaught Error : Error calling method on NPObject on Android

android - 由于选项菜单,如何在Android中取消选择TabLayout的所有选项卡?