2014-04-21 154 views
2

我從頭開始創建一個HTML頁面,並在其中動態地放置值,然後在WebView中顯示它。將dp值轉換爲WebView中可用的px值(dp到CSS px)

我試圖在WebView(如HTML)內複製ActionBar(它出現在應用程序的其他活動中)​​。

我知道Actionbar的高度以及其內部標題的文字大小。

我從dimens文件夾檢索值是這樣的...

mTitleSize = res.getDimensionPixelSize(R.dimen.actionbar_title_text); // 50dp mActionbarH = res.getDimensionPixelSize(R.dimen.actionbar_height); // 25sp

...並且將它們放置在HTML文件的CSS。

我的問題是上面的值太大了。操作欄的高度和文字大小太大了。同樣的dimens值用於在應用程序的其餘部分(而不是webview,但在RelativeLayout內的本機android View)中顯示操作欄,它們看起來很棒。

所以......我猜想轉換後的50dp和像素值不等於原生ViewWebView裏面的相同值?該網頁是否以不同於本地應用的方式呈現?

如果是的話,應該怎麼一個轉換dp能夠在Webview所使用的px價值,仍然保持它看上去的應用程序的其他部分?

回答

4

我想通了。我只需要將該值除以裝置的密度

res.getDimensionPixelSize(R.dimen.actionbar_height)/res.getDisplayMetrics().density

...並設置在CSSpx

這是它該值。

1

要轉換浸入PX嘗試此代碼:

public static float dipToPixels(Context context, float dipValue) { 
    DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); 
} 

的公式爲:PX = DP *(DPI/160),對於具有160 dpi的屏幕上。有關更多信息,請參閱http://developer.android.com/guide/practices/screens_support.html

你可以嘗試:

public static int convertDipToPixels(float dips) 
{ 
    return (int) (dips * appContext.getResources().getDisplayMetrics().density + 0.5f); 
} 
+0

hei。謝謝,但getDimensionPixelSize已經這樣做了。這是一個很好的方法來轉換值,但它不完全與我的問題相關:) – AndreiBogdan

1

如果DP值,暗示尺寸,像機器人的上下文中:layout_width屬性,爲Resources.getDimensionPixelSize描述的邏輯()將被使用。也就是說,px值將舍入到最接近的整數值,特殊情況下,如果px> 0,則實際值至少爲1.

如果在上下文中使用dp值偏移,就像Inset Drawable的android:insetLeft屬性一樣,將使用Resources.getDimensionPixelOffset()所述的邏輯。也就是說,px值將被簡單地截斷爲一個整數值。

有時會使用未修改的浮點值,例如Shape Drawable中標記的android:dashWidth屬性,但這很少見。通常使用大小或偏移量邏輯,即使可以使用浮點值。

1

似乎Webview解釋像素爲DP,所以

body { 
    padding: 16px; 
} 

其實本來作爲16DP一套在Android原生視圖填充相同的效果。