Android WebView 内容显示问题

标签 android webview

我已将文本加载到 WebView 中

String html = "<p>1</p>\n" +
                "<p>2</p>\n" +
                "<p>3</p>\n" +
                "<p>4</p>\n" +
                "<p>5</p>\n" +
                "<p>6</p>\n" +
                "<p>7</p>\n" +
                "<p>8</p>\n" +
                "<p>9</p>\n" +
                "<p>10</p>\n" +
                "<p>11</p>\n" +
                "<p>12</p>\n" +
                "<p>13</p>\n" +
                "<p>14</p>\n" +
                "<p>15</p>\n" +
                "<p>16</p>\n" +
                "<p>17</p>\n"+
                "<p>18</p>\n";
        questionTextView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "UTF-8", null);

当我有 17 个段落时,一切都显示正常,但是当我添加 18 个或更多段落时,所有文本都消失了,我只看到滚动线。

这是 WebView 设置

if (Build.VERSION.SDK_INT >= 11) {
        questionTextView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
  final WebSettings webSettings = questionTextView.getSettings();
        //float fontSize = getResources().getDimension(R.dimen.practice_text_size);
        //webSettings.setDefaultFontSize((int) fontSize);
        webSettings.setDefaultTextEncodingName("utf-8");
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webSettings.setBlockNetworkImage(true);
        webSettings.setGeolocationEnabled(false);
        webSettings.setNeedInitialFocus(false);

Web View xml

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <ImageView
        android:id="@+id/question_flag"
        android:layout_width="24dip"
        android:layout_height="24dip"
        android:layout_gravity="top|left"
        android:layout_marginLeft="4dp"
        android:layout_marginTop="4dp"
        android:scaleType="centerInside" />


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <LinearLayout
            android:id="@+id/question_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="vertical">

            <de.phase6.vtrainer.custom.FlowLayout
                android:id="@+id/question_images"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:layout_marginRight="10dip"
                android:orientation="horizontal"
                android:visibility="gone" />

            <WebView
                android:id="@+id/question_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:paddingLeft="8dp"
                android:paddingRight="8dp" />


            <LinearLayout
                android:id="@+id/question_sounds_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="8dp"
                android:gravity="center"
                android:orientation="horizontal"
                android:visibility="gone" />


        </LinearLayout>
    </ScrollView>

    <ImageButton
        android:id="@+id/btn_undo"
        style="@style/BorderlessButton"
        android:layout_width="48dip"
        android:layout_height="48dip"
        android:layout_gravity="bottom|start"
        android:longClickable="true"
        android:src="@drawable/back"
        android:visibility="invisible" />

    <ImageButton
        android:id="@+id/btn_send_back"
        style="@style/BorderlessButton"
        android:layout_width="48dip"
        android:layout_height="48dip"
        android:layout_gravity="bottom|end"
        android:longClickable="true"
        android:src="@drawable/send_back" />

</FrameLayout>

<View style="@style/DividerHorizontal" />

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom">

    <LinearLayout
        android:id="@+id/input_answer_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/light_grey_ddd"
        android:padding="@dimen/practice_input_padding"
        android:orientation="vertical"
        android:visibility="visible">

        <TextView
            android:id="@+id/user_answer_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/your_answer"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textAllCaps="true"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/input_answer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:focusableInTouchMode="true"
            android:focusable="true"
            android:ems="10"
            android:imeOptions="actionDone"
            android:singleLine="true"
            android:inputType="textNoSuggestions" />
    </LinearLayout>

    <Button
        android:id="@+id/btn_see_answer"
        style="@style/BorderlessButton"
        android:layout_width="match_parent"
        android:layout_height="48dip"
        android:textAllCaps="true"
        android:text="@string/show_answer" />

</FrameLayout>

最佳答案

经过调查,我发现当您将 WebView 放入 ScrollView 并设置

时,这个问题会重现
if (Build.VERSION.SDK_INT >= 11) {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

屏幕上的信息量大约为两屏或更多,然后 WebView 变为空白。

要解决此问题,请不要设置 LayerType 或设置 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

关于Android WebView 内容显示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192530/

相关文章:

android - 如何测试android项目的升级版本?

android - 从 java 传递给 jni 的参数返回奇怪的值

android - 在 Android 中销毁 webview

android - 如何在默认浏览器中为 Android 中的 onCreateWindow 打开请求?

android - 与现有 iOS 和 Android 应用程序中的嵌入式 (UI)Webviews 通信

java - 如何启动 "settings"应用程序?

Java android xml文本框没有文本=没有按钮点击

Android Studio/Kotlin : Gradle error - cannot find compile() method for arguments [com. android.support:recyclerview-v7:$support_version]

java - ProgressDialog 不适用于 fragment 的参数

JavaFX WebView 无法加载某些网站