2011-06-03 148 views
3

我有一個按鈕,其layout_height爲10mm,在大多數設備上看起來都正確,但例如Lg Optimus 2X和Motorola Defy上的按鈕大約有一半大小:Android:尺寸爲毫米或英寸的視圖尺寸不正確

我檢索到這些設備上的DisplayMetrics信息,這裏是一個簡短的概述:

HTC Desire Z:  480x800, density : HIGH, xdpi: 254.0, ydpi: 254.0 
Motorola Defy:  480x854, density : HIGH, xdpi: 96.0, ydpi: 96.0 
Samsung Galaxy S2: 480x800, density : HIGH, xdpi: 217.71428, ydpi: 218.49463 
LG Optimus 2X:  480x800, density : HIGH, xdpi: 160.0, ydpi: 160.0 

正如你可以看到Desire Z的和三星有一個合理的期待X/Y-DPI值。違抗和優化提供了不正確的值,我認爲這是錯誤大小的原因。

除了爲這些設備創建單獨的佈局文件之外,是否還有其他方法來解決硬件錯誤?

或者是否建議不要使用mm/in尺寸?

回答

0

您不應該使用mm/in來聲明UI的尺寸值。 不建議使用。爲什麼?因爲它不會跨設備正確縮放。

推薦的方法是使用dp/sp來測量視圖對象/字體大小。

閱讀這篇文章:

More Resource Types - Dimension

+2

在某些情況下,我不想資產規模...比如某個按鈕應該始終有一定的最小尺寸(大約拇指的大小,6-10毫米高)。即使在像x10 240x320和160dpi這樣的設備上,按鈕仍然應該有6-10mm的高度。我知道這是我正在開發的應用程序的一種特殊要求。但有一個原因爲什麼有一個毫米/英寸的測量。該文件沒有說明不推薦使用該測量。只有px尺寸不推薦。 – 2011-06-06 09:39:33

+0

如果您忽略多功能設備,以毫米/英寸爲單位指定的內容將在具有不同dpi的設備上正確縮放。它實際上比dp單位的縮放效果更好(請參閱我的回答以及與之相關的其他問題)。不過,我同意dp是在這個特定情況下使用的單位。 – nibarius 2014-03-28 14:38:26

0

基於MATLAB你Kristiono Setyadi的回答提供的額外信息,我說你應該設置按鈕的大小48 dp。 dp單元考慮到設備的dpi,因此使用dp指定的內容在不同分辨率和dpi的設備上看起來會具有相似的物理尺寸。

dp單元的一個好處是,它不受你注意到的硬件錯誤的影響,因爲它不是基於xdpi/ydpi而是基於densityDpi,而這似乎是在所有設備上或多或少地正確實現的。

如果其他遇到類似問題的人發現這個問題,我會嘗試回答您的其他問題,即使使用dp對您來說應該足夠好。

除了爲這些設備創建單獨的佈局文件之外,是否有其他方式來解決硬件錯誤?

您不應該爲這些設備創建單獨的佈局文件,因爲那裏有更多的設備以相同的方式損壞。 Galaxy Mini和Galaxy S3 Mini是我發現的其他兩款手機,其行爲方式相同。

或者是否建議不使用mm/in的大小?

如果您確實需要特定數量的毫米或英寸,則可以使用mm/in。在這種情況下,使用dp不適用於所有設備,因爲每臺設備的dp-per-inch數量不同。有關詳細信息,請參閱:Android: which UI element size unit to use (if dp not working)

使用mm /時,必須注意報告xdpi/ydpi的值不正確的「損壞」設備。

解決此問題的一種方法是使用毫米或英寸設備,其中DisplayMetrics.xdpi/DisplayMetrics.densityDpi大於0.8但小於1.2,並且對其他設備堅持使用dp,因爲densityDpi和xdpi之間的差異很大的設備可能報告的值不正確爲xdpi。

有關單位提供更多的細節和用毫米和英寸的問題,請參見:Why Lint shows warning when using in (inch) or mm (millimeter) units as dimension?