我正在从头创建一个HTML页面并在其中动态放置值,然后将其显示在WebView
内。
我正在尝试复制ActionBar
内的WebView
(在应用程序中显示在其他活动中)(作为HTML)。
我知道Actionbar
的高度以及其中标题的文字大小。
我正在检索dimens
文件夹中的值,如此...
mTitleSize = res.getDimensionPixelSize(R.dimen.actionbar_title_text); // 50dp
mActionbarH = res.getDimensionPixelSize(R.dimen.actionbar_height); // 25sp
...并将它们放在html文件的CSS中。
我的问题是上面的值太大了。操作栏的高度和文本大小太大。相同的dimens
值用于在应用的其余部分显示操作栏(不是webview,而是View
中的原生android RelativeLayout
),它们看起来很棒。
所以......我猜测转换后的50dp
和25sp
值的像素在本地View
内和WebView
内并不相同?网页是以与本机应用程序不同的方式呈现的吗?
如果是这样,我应该如何转换dp
以便能够使用px
中的Webview
值并仍然将其视为应用的其余部分?
答案 0 :(得分:5)
我明白了。我只需要将值除以设备的密度
即
res.getDimensionPixelSize(R.dimen.actionbar_height) / res.getDisplayMetrics().density
...并将CSS
中的值设为px
就是这样。
答案 1 :(得分: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);
}
答案 2 :(得分:2)
似乎Webview
将像素解释为dp,所以
body {
padding: 16px;
}
实际上与在Android原生视图上设置的16dp填充具有相同的效果。
答案 3 :(得分:1)
如果在隐含大小的上下文中使用dp值,例如android:layout_width属性,则将使用为Resources.getDimensionPixelSize()描述的逻辑。也就是说,px值将四舍五入到最接近的整数值,特殊情况是如果px> 0,那么实际值至少为1.
如果在隐含偏移的上下文中使用dp值,就像Inset Drawable的android:insetLeft属性一样,将使用为Resources.getDimensionPixelOffset()描述的逻辑。也就是说,px值将被简单地截断为整数值。
有时会使用未修改的浮点值,例如Shape Drawable中标记的android:dashWidth属性,但这种情况非常罕见。通常使用大小或偏移逻辑,即使可以使用浮点值。