2012-06-24 60 views
1

我的Android應用程序在480x800像素分辨率下看起來不錯,但它在LDPI屏幕上的分辨率爲240x400像素。我知道我可以通過使用getResources().getDisplayMetrics().density來獲得活動屏幕的縮放比例,這將根據屏幕分辨率給出確切的float值。如何使用DPI縮放因子(浮點)設置邊距(int)

在我的應用程序,我已經使用RelativeLayoutImageView秒鐘內它,並設置使用setMargins()圖像的邊緣,這種方法是用像素int其頂部,左側,底部和正確的價值觀,我該怎麼設置這些使用DPI因子的值是多少?(這是一個浮點數)。我們有Math.floor(),但我使用像素在非常特定的位置定位圖像,並且方法返回的DPI因子具有非常具體的小數位值,不能忽略,因此投射到int不適用於我。

更新

還有,我用lp.setMargins(100,200,0,0);來設置頁邊距,我會在裏面做什麼修改使用我從設備收到DPI因素?

P.S.我知道它更像一個數學問題,而不是編程,但我對數學很窮,抱歉。

回答

7

看起來我現在過早地提出這個問題而不是擺弄自己,但也注意到我並不是第一個面對這個問題的人。

所以,這裏是我找到的解決方案。

我在我的Activity類中創建了以下方法。

private int px(float dips) 
{ 
    float DP = getResources().getDisplayMetrics().density; 
    return Math.round(dips * DP); 
} 

這將轉化給dp值轉換成相應的像素。您可以使方法中使用的變量DP爲全局變量,並在onCreate()方法中將其初始化,而不是在px()中,以使方法快速執行。

用法:

lp.setMargins(px(100),px(200), 0, 0); 

,或者如果你沒有創建px()只是這一點,並有DP全球。

lp.setMargins(100 * Math.round(DP), 200 * Math.round(DP), 0, 0); 

但是,使用方法使它看起來更清潔和可讀。 :-)