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

Android 将dp值转换为WebView内部可用的px值(dp转换为CSS px),android,Android,我从头开始创建一个HTML页面,并在其中动态放置值,然后将其显示在WebView中 我正试图在WebView(作为HTML)中复制ActionBar(显示在应用程序的其他活动中) 我知道操作栏的高度以及标题的文本大小 我正在从dimens文件夹中检索值,就像这样 mTitleSize=res.getDimensionPixelSize(R.dimen.actionbar_title_text);//50dp mActionbarH=res.getDimensionPixelSize(R.dime

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

我正试图在
WebView
(作为HTML)中复制
ActionBar
(显示在应用程序的其他活动中)

我知道
操作栏的高度以及标题的文本大小

我正在从
dimens
文件夹中检索值,就像这样

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

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

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

所以。。。我猜转换后的
50dp
25sp
像素值在原生
视图和
WebView
中并不相同?网页的呈现方式是否与本机应用不同


如果是这样,如何将
dp
转换为能够使用
Webview
中的
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屏幕上显示。有关更多信息,请参阅

你可以试试:

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

如果dp值用于表示大小的上下文,如android:layout\u width属性,则将使用()中描述的逻辑。也就是说,px值将四舍五入到最接近的整数值,特殊情况是,如果px>0,则实际值将至少为1


如果在暗示偏移的上下文中使用dp值,如Inset Drawable的android:insetLeft属性,则将使用所述的逻辑。也就是说,px值将被简单地截断为整数值


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

我找到了答案。我只需要把这个值除以设备的密度

i、 e

res.getdimension像素大小(R.dimen.actionbar\u高度)/res.getDisplayMetrics().density

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


就是这样。

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

body {
  padding: 16px;
}

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

hei。谢谢,但是getDimensionPixelSize已经完成了这项工作。这是一种转换值的好方法,但与我的问题并不完全相关:)