2010-03-09 92 views

回答

201

它使用像素,但我相信你想知道如何使用驟降代替。答案在TypedValue.applyDimension()。這裏有一個如何逢低轉換代碼到PX的例子:

// Converts 14 dip into its equivalent px 
Resources r = getResources(); 
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics())); 
+58

你也可以調用nbDips * getResources()。getDisplayMetrics()。density – 2010-03-09 05:08:41

+9

實際上,這正是TypedValue.applyDimension()所做的。我考慮過發佈該內容,但我喜歡瀏覽API以防萬一發生任何變化......但我認爲如果您給予它可以使用該方法是安全的。 :) – 2010-03-09 05:15:34

+11

applyDimension()版本執行更多的代碼,我發現它更難以閱讀。 FWIW,我發佈的這一行是我們在框架和標準應用程序中實際使用的地方。 – 2010-03-09 05:25:02

0

像素當然,該方法是要求像素作爲參數。

+1

如果是在佈局XML文件中,我們可以指定的android:layout_width = 「100dip」 或Android:layout_width = 「100px的」。在源代碼中,我們無法將佈局的寬度指定爲100dip? – user256239 2010-03-09 05:05:12

+0

不是直接的,你必須使用DisplayMetrics.density來轉換自己。 – 2010-03-09 05:10:25

23

獲得代碼的傾角的固定數量的正確方法是創建一個包含DP提供了一個資源XML文件中的值有點像:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="image_width">100dp</dimen> 
    <dimen name="image_height">75dp</dimen> 
</resources> 

然後參考該資源在你的代碼如下所示:

float width = getResources().getDimension(R.dimen.image_width)); 
float height = getResources().getDimension(R.dimen.image_height)); 

你已經返回將被用於該設備的像素密度要相應地調整,所以你並不需要保持replicat浮子在整個應用程序中使用轉換方法。

+0

在我的情況下,這個解決方案在我有一個自定義對話框的情況下效果最好,該對話框有一個列表視圖,並且希望將ListView中的標題標籤和列的寬度設置爲相同的寬度。 – 2013-06-07 11:02:51

+0

你的第一句話有點兒有趣,你基本上說創建一個XML文件是*「在代碼中指定[某事]」的正確方法*。那麼我認爲你只是使用代碼中的常量沒有指定它:) – Joffrey 2014-06-19 08:35:21

+0

@Joffrey是的我明白你的意思,所以我已經略微更新了措辭 – SDJMcHattie 2014-07-10 14:37:12

3

方法setWidth(100),將寬度設置爲100 px(不在dp中)。因此,在不同的android手機上可能會遇到寬度不定的問題。因此,在dp中使用測量而不是像素。使用下面的代碼獲取測量值示例寬度的dp = 300px,高度= 400px。

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics()); 

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());