简体   繁体   中英

WebView - break long words

I create a service that loads data from a remote server and returns HTML data. This data I put to my WebView. All work good but have one problem: If some word is too long, WebView adds horizontal scroll. I add CSS file with break-work, word-wrap but it doesn't help.

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);

问题形象

I did face completely similar problems and finally realized that I misused the css options for that. Just add word-break: break-all; word-break: break-word word-break: break-all; word-break: break-word to css style for body and/or headers and it's done

<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>

Some more details for css properties can be found here or there

Please be careful, as word-break option could seriously impact the readability of the text in WebView. Only use it when you really need it.

Apparently:

setLoadWithOverviewMode(true) loads the WebView completely zoomed out

setUseWideViewPort(true) makes the Webview have a normal viewport (such as a normal desktop browser), while when false the webview will have a viewport constrained to its own dimensions (so if the webview is 50px*50px the viewport will be the same size)

so i recommend you don't use setUseWideViewPort, the following code is for similar task that worked good:

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);

i hope this answer be a good solution for you .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM