2016-12-19 3 views
2

Создаю службу, которая загружает данные с удаленного сервера и возвращает данные HTML. Эти данные я ввел в свой WebView. Все работают хорошо, но имеют одну проблему: если какое-то слово слишком длинное, WebView добавляет горизонтальный прокрутки. Я добавляю файл CSS с break-work, word-wrap, но это не помогает.WebView - сломать длинные слова

JSONObject jsonObject = new JSONObject(strResult); 
String content = jsonObject.getString("postContent"); 
TextView postTitle = (TextView) view.findViewById(R.id.postTitle); 
postTitle.setText(jsonObject.getString("postTitle")); 
WebView postContent = (WebView) view.findViewById(R.id.postContent); 
postContent.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 
postContent.getSettings().setLoadWithOverviewMode(true); 
postContent.getSettings().setUseWideViewPort(true); 
postContent.getSettings().setBuiltInZoomControls(true); 
postContent.getSettings().setJavaScriptEnabled(true); 
postContent.loadDataWithBaseURL("file:///android_asset/", content, "text/html; charset=utf-8", "utf-8", null); 

Problem Image

ответ

0

Видимо:

setLoadWithOverviewMode (истина) загружает WebView полностью Уменьшенный

setUseWideViewPort (правда) делает Webview иметь нормальное окно просмотра (например, нормальные браузером рабочего стола), тогда как при false веб-просмотр будет иметь окно просмотра, ограниченное его собственными измерениями (так что если веб-просмотр составляет 50 пикселей * 50 пикселей, тот же размер)

поэтому я рекомендую вам не использовать setUseWideViewPort, следующий код для подобной задачи, которая работала хорошо:

final WebSettings webSettings = webView.getSettings(); 
        webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
        webSettings.setEnableSmoothTransition(true); 
        webView.setBackgroundColor(Color.parseColor("#00000000")); 
        String before = "<html><head><style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/w_yekan.ttf\")}body {font-family: MyFont;font-size: 14px;text-align: right;}</style></head><body><div style=\"direction:rtl !important;; text-align:right !important;\">"; 
        String after = "</body></html>"; 
        String myHtmlString = before + Utils.editString(DoaText) + after; 
        webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR); 
        webView.loadDataWithBaseURL(null, myHtmlString, "text/html", "UTF-8", null); 

я надеюсь, что этот ответ будет хорошим решением для вас.

0

Я столкнулся с совершенно похожими проблемами и, наконец, понял, что я неправильно использовал опции css для этого. Просто добавьте word-break: break-all; word-break: break-word в стиле CSS для тела и/или заголовки, и это сделано

<head> 
<style type="text/css"> 
    body {text-align: center; word-break: break-all; word-break: break-word} 
    h1 {font-size:large; word-break: break-all; word-break: break-word} 
    h2 {font-size:medium; word-break: break-all; word-break: break-word} 
</style> </head> 

Некоторые подробности для свойств CSS можно найти here или there

Пожалуйста, будьте осторожны, так как word-break вариант может серьезно повлиять на читаемость текста в WebView. Используйте его только тогда, когда он вам действительно нужен.