Как сделать текст подходящим для экрана (текстовое обертывание) в WebView с помощью KitKat

У меня проблема в моем WebView с Android 4.4. Перед KitKat текст автоматически устанавливался со всеми разрешениями устройств в веб-просмотрах. Но сегодня он не подходит автоматически с 4.4. Я думаю, это из-за обновления WebView на основе Chromium с KitKat.

Вот 2 скриншота одной и той же страницы:

Один из Galaxy Nexus (Android 4.3)

Один из Nexus 5 (Android 4.4 и WebView на основе Chromium)

Знаете ли вы, есть ли новая опция для размещения текста с экраном в веб-просмотре?

NB: Я не думаю, что мой макет как-то связан с моей проблемой, но здесь все равно:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

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

</RelativeLayout>

Ответ 1

Похоже, что используется NARROW_COLUMNS. Это было устарело в KitKat.

Однако был добавлен новый алгоритм компоновки, который мог бы исправить это, здесь есть пример: https://github.com/GoogleChrome/chromium-webview-samples

Основной код:

// Use WideViewport and Zoom out if there is no viewport defined
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);

settings.setLayoutAlgorithm(LayoutAlgorithm.TEXT_AUTOSIZING);

Другой вариант - включить масштабирование зума:

// Enable pinch to zoom without the zoom buttons
settings.setBuiltInZoomControls(true);

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
    // Hide the zoom controls for HONEYCOMB+
    settings.setDisplayZoomControls(false);
}

Новый алгоритм компоновки может не решить все проблемы, и он не ясно, как надежно имитировать старое поведение переноса.

Большинство возражений похоже на общие проблемы браузера по отображению сайтов на мобильных устройствах. Им понравился старый способ, но я не видел ни одного другого браузера, который выполнял бы алгоритм обертывания текста.

Ответ 2

Если вы можете редактировать html (например, с помощью простой замены строки), добавьте стиль word-wrap: break-word в элемент html контейнера текста. Например: если элемент верхнего уровня в теле html - это <p>, измените на <p style="word-wrap: break-word;">. Затем веб-просмотр обернет текст и поместится на экран.