我会逐步解决我的问题,以便更容易关注/回答。
步骤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),然后动态设置布局的高度为一半。很多工作,但是我想这是做到这一点的方法吗?
答案 0 :(得分:1)
使用包含空LinearLayout
的{{1}},然后是您的真实内容,然后是另一个空的View
。将空视图设置为View
,将您的内容设置为android:layout_height="0dp" android:layout_weight="1"
。现在,封闭的android:layout_height="0dp" android:layout_weight="2"
将使您的内容在屏幕中心的一半高度,而另一半的空视图(在它们之间平均分配)。如果您只希望将内容放在屏幕的上半部分(或下半部分)而不是中心,请删除其中一个空视图并使用LinearLayout
。
如果你想要相对于屏幕适合的东西,总是使用这样的结构。您只应对android:layout_weight="1"
小尺寸的固定尺寸(如边距或图标高度)进行测量。
答案 1 :(得分:0)
在星系S上,dp为1.5
ldpi: 1dp = 0.75px
mdpi: 1dp = 1px
hdpi: 1dp = 1.5px
xdpi: 1dp = 2dp
reall px将是`(int)(density * x + 0.5)
你可以通过
获取dpgetResources().getDisplayMetrix().density.