4

我在values/dimens.xml中將按鈕的寬度指定爲600dp,但是當我在Nexus 5上部署並運行它時,它將佔用橫向方向上的所有可用寬度。爲什麼600dp寬度的視圖佔用了我所有的Nexus 5的橫向寬度?

我的活動只在橫向模式下運行,正如我在清單文件中指定的那樣。佈局位於layouts目錄中。這些圖像位於'drawable-xxhdpi'目錄中,它們顯示正常,但我在dp中指定的所有內容都被放大了。

在Android Studio和實際設備中的預覽似乎表現爲它應該是1920時最大寬度爲600dp。爲什麼是這樣的,我該如何修復它?

+1

http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android – nhaarman 2014-09-29 18:26:03

回答

6

在風景Nexus 5上的顯示器的物理寬度是1920像素,但600dp!= 600px。 Nexus 5的顯示密度約爲445ppi。 DP只是中等密度(160 ppi)的像素。因此,在dp中指定的所有內容都會按照大約445/160 = 2.78125的比例進行縮放。所以600dp實際上大約是1669像素。這應該說明你看到的大部分內容。

也可能有一些關於您的佈局是拉伸按鈕。如果您發佈佈局xml,我們可能會提供更多信息。

+0

啊,對。因此,在設置dimens.xml之前,我必須將每個維度除以該因子,因爲我擁有1920x1080的設計?嗯...爲什麼需要在values-swXXXXdp目錄下有不同的dimens.xml文件,當'dp'已經在做這個魔術時,我想知道? – user4092233 2014-09-29 19:07:45

+0

@ user4092233有關詳細信息,請參閱http://developer.android.com/training/multiscreen/index.html – 2014-09-29 19:24:27

+0

@ user4092233 - 雖然我們很少使用不同的配置,但我很少使用不同的dimens.xml文件。例如,對於不同的屏幕尺寸,您可能需要不同的尺寸。例如,在大屏幕上,您可能需要在視圖周圍留出1/2英寸的邊距。因此,無論像素密度如何,您都可以指定80dp的邊距(這可能是mdpi設備上的80像素,但更像是Nexus 5上的223像素)。在較小的屏幕上,您可能只需要1/8英寸的邊距,即20dp。對於與密度無關的維度,請使用'/ res/values-nodpi/dimens.xml'和px,而不是dp。 – 2014-09-29 20:20:24

相關問題