0

同じ外観TextViewWebViewコンテンツを取得しようとすると、Android 4 の強い抵抗に遭遇しました。

推奨されていないのでDisplay getWidth()、Android 4 でハードコーディングされた値を試しましたが、結果は同じです。webViewテキストが大きくなり、スクロールが表示され、textViewフォント サイズが小さくなります。

同じ表示タイプに対するこのような動作は私には意味がありません。それがどこかに文書化されているかどうか誰か教えてください。


解決策: WebView では無視されている ようptに見えたのでpx、できるだけ近くで scaledを使用する必要がありました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());
}

アンドロイド 2.3 WVGA

アンドロイド 2.3

アンドロイド 4.1 WVGA

アンドロイド 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", "");
4

1 に答える 1

1

どのデバイスでテストしていますか?アンドロイド自体のバージョンではなく、画面に基づいたスケーリングに関係しているのではないかと思います。

このsetTextSize(float size)方法では、スケーリングされたピクセル単位(sp)を使用します。htmlはptユニットを使用していますが、spのようにディスプレイの解像度は考慮されていないと思います。

このようにしてみてください:

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

spの代わりにptユニットを使用する必要があります。これにより、テキストがWebView内と同じように表示される可能性があります。ただし、考慮すべきもう1つの点は、WebViewにはズーム率があるということです。フォントが同じサイズであっても、WebViewをズームイン/ズームアウトできますが、デフォルトのTextViewはズームインできません。これにより、画面上のフォントのサイズも異なります。

于 2012-12-23T00:00:47.840 に答える