2013-07-09 26 views
0

我知道這個問題有N個線程,但我仍然不知道如何在Android上爲Widgets(按鈕,圖像)應用寬度和高度。Android:如何計算dp?

我已閱讀此:http://developer.android.com/guide/practices/screens_support.html 和許多其他線程,但我不明白它。

我該如何計算按鈕的dpi?

我需要知道設備的dpi? (維基百科列表): http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density

但還有很多其他設備具有不同的dpi!

我有一個photoshop(800x480)和一個按鈕(290x65)的設計。我保存並導入了我的android項目中新創建的'drawable'文件夾中的圖像按鈕。在XML(佈局)中,我使用導入的按鈕圖像插入了ImageView。

<ImageView 
    android:id="@+id/btnNewImage" 
    android:layout_width="210dp" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginTop="7dp" 
    android:src="@drawable/new_image" /> 

插入的圖像是完全不同的,它更大。我該如何計算Android尺寸的確切寬度和高度值?

+1

退房的比例因子在這裏:http://stackoverflow.com/a/11801140/833647爲華電國際使它的1.5倍大小和地點它在hdpi文件夾中,對於xhdpi使其大小爲2倍等。 –

+2

1dp = 1像素@ 160dpi。在您已鏈接到的頁面上有一個公式,可以解釋像素轉換的dp <->。 –

+1

可能有助於閱讀:http://developer.android.com/design/style/metrics-grids.html –

回答

1

如果您需要了解設備的DPI,使用下面的代碼片段:

int dpi = getResources().getDisplayMetrics().densityDpi; 

如果你要轉換從DP到像素:

int px = (int)(dp * getResources().getDisplayMetrics().density + 0.5f); 

如果你想從轉換像素到Dp:

int dp = (int)(px/getResources().getDisplayMetrics().density + 0.5f); 
+0

等等,爲什麼是0.5f?它應該是密度和結果。 – kcoppock

+1

它在那裏四捨五入到最接近的整數,而不僅僅是四捨五入。 ([Android網站](http://developer.android.com/guide/practices/screens_support.html#dips-pels)也會在其代碼示例中執行此操作。) – Frxstrem

+0

有趣。每天學些新東西。 :)我猜這是爲了確保它至少有1 px,也許。 – kcoppock

1

爲了讓您的圖像顯示爲合適的尺寸,您需要將它放在正確的「dra wable「文件夾。例如,如果您有一個48x48像素的圖標,它應該放在drawable-mdpi中。理想情況下,您應該爲每個文件夾創建圖形,以便Android可以根據屏幕大小和分辨率選擇最佳的圖形。

我對我的圖標(我從某處現在被遺忘的地方收集到)使用了以下指南:可以推斷這些弄清楚你所需要的像素尺寸:

Recommended drawable sizes - to match size of launcher icon, about 3/8" 
36x36 - low 
48x48 - med 
72x72 - high 
96x96 - extra high