繁体   English   中英

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

[英]Convert dp values to px values usable inside WebView (dp to CSS px)

我正在从头创建一个HTML页面并在其中动态放置值,然后在WebView显示它。

我正在尝试在WebView复制ActionBar (在应用程序中出现在其他活动中)​​(作为HTML)。

我知道Actionbar的高度以及它内部标题的文本大小。

我正在从dimens文件夹中检索值,如此...

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

...并将它们放在html文件的CSS中。

我的问题是上面的值太大了。 操作栏的高度和文本大小太大。 相同的dimens值用于在应用程序的其余部分显示操作栏(不是webview,而是在RelativeLayout View本机android View ),它们看起来很棒。

所以...我猜测转换后的50dp25sp的像素值并不意味着在原生ViewWebView内部相同? 网页是以与本机应用程序不同的方式呈现的吗?

如果是这样,应该如何转换dp以便能够在Webview使用px值并仍然将其视为应用程序的其余部分?

我想到了。 我只需要将值除以设备的密度

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

...并将CSS中的值设置为px

就是这样。

要将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);
}

似乎Webview将像素解释为dp,所以

body {
  padding: 16px;
}

实际上与在Android原生视图上设置的16dp填充具有相同的效果。

如果在隐含大小的上下文中使用dp值,例如android:layout_width属性,则将使用为Resources.getDimensionPixelSize ()描述的逻辑。 也就是说,px值将四舍五入到最接近的整数值,特殊情况是,如果px> 0,则实际值将至少为1。

如果在隐含偏移的上下文中使用dp值,就像Inset Drawable的android:insetLeft属性一样,将使用为Resources.getDimensionPixelOffset()描述的逻辑。 也就是说,px值将简单地截断为整数值。

有时会使用未修改的浮点值,例如Shape Drawable中标记的android:dashWidth属性,但这种情况非常罕见。 通常使用大小或偏移逻辑,即使可以使用浮点值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM