将dp值转换为WebView内可用的px值(将dp转换为CSS px)

4
我正在从头创建一个HTML页面,并在其中动态地放置值,然后在WebView中显示它。
我正在尝试在WebView(作为HTML)内部复制应用程序中其他活动中出现的ActionBar。
我知道Actionbar的高度以及其中标题的文本大小。
我通过以下方式从dimens文件夹中检索值... mTitleSize = res.getDimensionPixelSize(R.dimen.actionbar_title_text); // 50dp mActionbarH = res.getDimensionPixelSize(R.dimen.actionbar_height); // 25sp ... 并将它们放置在html文件的CSS中。
我的问题是上面的值太大了。ActionBar的高度和文本大小都太大了。相同的dimens值用于在应用程序的其余部分显示ActionBar(不是在WebView中,而是在RelativeLayout内的本机android View中),它们看起来很棒。
因此...我猜测在原生ViewWebView内转换的像素值意义不同?网页的呈现方式与本机应用程序有所不同吗?
如果是这样,应该如何转换dp以便在Webview中使用px值并仍使其看起来像应用程序的其余部分?
4个回答

5

我找到了答案。我只需要用设备的密度除以该值。

例如:

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

然后将这个值设置在CSS中,作为px单位。

就是这样。


2

将dip转换为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);
}

嗨,谢谢,但是getDimensionPixelSize已经可以做到这一点了。这是一种很好的方法来转换值,但它并不完全符合我的问题 :) - AndreiBogdan

1
似乎 Webview 将像素解释为 dp,因此:
body {
  padding: 16px;
}

实际上与在Android本地视图上设置16dp填充的效果相同。


1
如果在涉及大小的上下文中使用dp值,比如android:layout_width属性,将使用Resources.getDimensionPixelSize()描述的逻辑。也就是说,px值将四舍五入为最接近的整数值,特殊情况是如果px> 0,则实际值至少为1。
如果在涉及偏移量的上下文中使用dp值,比如Inset Drawable的android:insetLeft属性,则将使用Resources.getDimensionPixelOffset()描述的逻辑。也就是说,px值将简单地截断为整数值。
有时会使用未修改的浮点值,例如Shape Drawable中标记的android:dashWidth属性,但这种情况非常罕见。通常使用大小或偏移逻辑之一,即使可以使用浮点值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接