意外的WebView内容外观

时间:2012-12-22 23:46:14

标签: android android-webview

为了获得TextViewWebView内容的相同外观,我遇到了Android 4的强大阻力。

由于Display getWidth()已被弃用,我尝试了针对Android 4的硬编码值,但结果是相同的:在webView,文字变大,滚动显示在textView {1}}字体大小减少。

对于相同的显示类型的这种行为对我来说没有任何意义,有人可以告诉我,如果在任何地方都有记录吗?


解决方案: 由于pt似乎被WebView忽略,我必须尽可能地使px缩放到尽可能接近sp的位置:

((TextView)findViewById(R.id.textView1)).setTextSize(TypedValue.COMPLEX_UNIT_SP,24);

font-size: " + pixelsToSp(this, 24.0f) + "px;

private float scaledPX(Context context, Float px) {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, px, getResources().getDisplayMetrics());
}

Android 2.3 WVGA

Android 2.3

Android 4.1 WVGA

Android 4.1

布局

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:text="same text"/>

<WebView
    android:id="@+id/webView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

代码

((WebView)findViewById(R.id.webView1)).getSettings().setLoadWithOverviewMode(true);
((WebView)findViewById(R.id.webView1)).getSettings().setUseWideViewPort(true);
((WebView)findViewById(R.id.webView1)).getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); // this line was missed when the screenshots was made, it makes the images being scaled correctly

((TextView)findViewById(R.id.textView1)).setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
final String width = Integer.toString(getWindowManager().getDefaultDisplay().getWidth());
final String html = "<html style = 'margin: 0px; padding: 0px;'>"
        + "<head>"
        + "<meta name='viewport' content='width=device-width; user-scalable=no; initial-scale=1.0; minimum-scale=1.0; maximum-scale=1.0; target-densityDpi=device-dpi;'/>"
        + "</head>"
        + "<body style = '"
        + "width: "
        + width
        + "px;"
        + ";'>"
        + "<div style='overflow: hidden; width: 100%; font-size: " + 24 + "px;'>"
        + "same text size"
        + "<img style='max-width: " + width + "px;' src=\"http://upload.wikimedia.org/wikipedia/commons/c/ca/Niobe050905-Siamese_Cat.jpeg\"/>"
        + "</div>"
        + "</body>";

((WebView)findViewById(R.id.webView1)).loadDataWithBaseURL("", html, "text/html", "UTF-8", "");

1 个答案:

答案 0 :(得分:1)

您正在测试哪些设备?我怀疑它与基于屏幕的缩放有关,而不是与android本身的版本有关。

setTextSize(float size)方法使用缩放像素单位(sp)。 html使用的是pt单元,我认为它不会像sp一样考虑显示分辨率。

试试这样:

((TextView)findViewById(R.id.textView1)).setTextSize(TypedValue.COMPLEX_UNIT_PT,24);

那应该使用pt单位而不是sp。哪个可能使文本看起来与WebView内部相同。然而,另一件需要考虑的事情是WebView具有缩放因子。即使字体大小相同,WebView也可以放大/缩小,而默认的TextView则不能,这也会导致屏幕上的字体大小不同。