2012-08-16 86 views
1

我會逐步解決我的問題,以便跟蹤/回答更容易。Android:可以在佈局上使用DP並使其在不同設備上看起來相同?

步驟1:根據Android Developer Guide,「密度無關像素相當於160 dpi屏幕上的一個物理像素」。這意味着在具有233dpi的Galaxy S上,1dp等於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,它會佔用一半的屏幕。經過測試和工作。

問題:我該如何製作一個LinearLayout,它將在Galaxy S和Galaxy S3上使用與密度無關的像素,同時佔用一半的屏幕?因爲如果我使用274dp,它只會在S上佔用一半的屏幕,反之亦然。或者我的計算在任何一步都是錯誤的?

更新:思考它我想出了以下想法:使用「ScreenMetrics」來獲得設備的dpi和屏幕分辨率。然後,讓我的應用程序計算DP中屏幕的總大小(這將是分辨率除以(device/160的dpi)的分辨率,然後將佈局的高度動態設置爲其大小的一半。我想這是做到這一點的呢?

回答

0

銀河S,D P爲1.5

ldpi: 1dp = 0.75px 
mdpi: 1dp = 1px 
hdpi: 1dp = 1.5px 
xdpi: 1dp = 2dp 

的雷爾PX將是`(INT)(密度* X + 0.5)

可以給你帶dp

getResources().getDisplayMetrix().density. 
+0

我明白了。事實上,我在我的問題中使用了這些計算。我正在問一些不同的東西。 – 2012-08-16 01:15:47

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測量小尺寸,固定尺寸(如邊距或圖標高度)。

相關問題