From e88e36c3cf2adf05b586a2c6d62b278bbe8b8d2d Mon Sep 17 00:00:00 2001 From: Nate Fischer Date: Thu, 3 Sep 2020 21:52:06 +0000 Subject: [PATCH] AW docs: upstream web page layout guide No change to logic, only docs. This upstreams the web page layout guide, mostly autogenerated from the google sites page (tables were converted by hand). I made some minor edits to the text for readability, but the content is mostly unchanged. This omits the "experimental data" section on the original doc because (1) this isn't very relevant anymore since the behavior has shipped and we don't intend to reevaluate and (2) the data was internal-only. Fixed: 1083508 Test: tools/md_browser/md_browser.py Test: Upload to gerrit > open file > click "gitiles" Change-Id: Ic1ece33a5565986235af1dbb735d35966253fe5b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2393006 Reviewed-by: Shimi Zhang Commit-Queue: Nate Fischer Cr-Commit-Position: refs/heads/master@{#804429} --- .../docs/images/web_page_layout_decisions.png | Bin 0 -> 49722 bytes android_webview/docs/web-page-layout.md | 89 ++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 android_webview/docs/images/web_page_layout_decisions.png create mode 100644 android_webview/docs/web-page-layout.md diff --git a/android_webview/docs/images/web_page_layout_decisions.png b/android_webview/docs/images/web_page_layout_decisions.png new file mode 100644 index 0000000000000000000000000000000000000000..1292576c43c9ea0e06d61f988fb646470727630d GIT binary patch literal 49722 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 HPEY?I6&Qze literal 0 HcmV?d00001 diff --git a/android_webview/docs/web-page-layout.md b/android_webview/docs/web-page-layout.md new file mode 100644 index 00000000000000..5ecffd45d209a4 --- /dev/null +++ b/android_webview/docs/web-page-layout.md @@ -0,0 +1,89 @@ +# Web Page Layout + +This page explains various settings and algorithms that affect web page layout +in WebView. The purpose is to provide an understanding of what WebView API +methods really do and how are they connected to each other (as their +documentation is terse to be said at best), so we can provide proper substitutes +for them in our implementation. + +[TOC] + +## WebView APIs + +The +[WebSettings](https://developer.android.com/reference/android/webkit/WebSettings) +class exposes several options to configure webpage layout. + +| WebSettings method | Description | +| ------------------------- | ----------- | +| `setLayoutAlgorithm` | Sets the underlying layout algorithm:
  • `NORMAL` means no rendering changes.
  • `NARROW_COLUMNS` makes all columns no wider than the screen if possible.
  • `SINGLE_COLUMN` moves all content into one column that is the width of the view **(deprecated)**.
The default algorithm is **`NARROW_COLUMNS`**. | +| `setLoadWithOverviewMode` | Sets whether the WebView loads pages in overview mode. The default is **false**. | +| `setTextZoom` | Sets the text zoom of the page in percent. The default is **100%** (no zoom). | +| `setUseWideViewPort` | Tells the WebView to use a wide viewport. The default is **false**. | + +It seems that the best systematic approach to describe the effects of changing +the layout settings, is to express their influence on the following 4 layout +parameters that in their own turn change how the page looks on the screen. The +layout parameters we will be using are as follows. + +| Parameter | Explanation | +| --------- | ----------- | +| Layout width | The width of the viewport in CSS (aka device-independent) pixels. The notion of a pixel is pretty much overloaded in the mobile world. By CSS pixels, we mean the “pixels” that are used in CSS declarations such as `width: 300px` or `font-size: 14px`. These pixels have nothing to do with the actual device screen resolution, and they are not affected by zooming of the content. | +| Maximum paragraph width | By default, a paragraph block in HTML tends to occupy the full width of the page. As we will see, layout settings can alter this behavior to make paragraphs fit the screen width. | +| Initial viewport scale | In the mobile world, viewport width is always fixed, but user is usually allowed to change the scale of the viewport. | +| Font scale | As opposed to the viewport scale, which is applied to the entire page contents, font scale is applied to fonts only. | + +### Hardware Specs + +Besides knowing the size of the screen in hardware pixels, for mobile devices +one also needs to know the screen density. For example, the screen of Nexus 7 +has 800 x 1205 pixels, with density of 1.33. That means, its "natural" width is +about 600 x 900 dips. These numbers are used when one specifies "device-width" +and "device-height" dimensions for "meta viewport" tag. + +### The Decision Diagram + +Below is the diagram for how WebView sets layout parameters. Depending on the +case, some of the settings may or may not affect the result. + +![Web page layout decision diagram](images/web_page_layout_decisions.png) + + + +*** aside +Elements with a large fixed width can expand the layout width from the normal +value (980 or device-width). This can happen when a mobile site includes a huge +image for example. We respect the implied width of the page instead of the one +stated by the viewport tag; this makes us robust to webmaster mistakes. +*** + +Font Scale is only affected by the TextZoom setting. + +## Configuring WebView like a browser + +WebView can approximate Chrome for Android's behavior with: + +```java +WebSettings settings = myWebView.getSettings(); +settings.setUseWideViewPort(true); +settings.setLoadWithOverviewMode(true); +settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING); +``` + +[System WebView Shell](webview-shell.md) is currently configured with these +settings. + +### Chrome for Android behavior in detail + +Chrome for Android works a little differently from WebView. One of the important +differences is that Chrome for Android doesn't have the `NARROW_COLUMNS` layout +mode, and instead provides font autosizing. The table below describes how Clank +sets the layout parameters depending on the page viewport specification. + +| Viewport | Parameters | +| -------- | ---------- | +| No viewport tag | Layout Width: 980px
Paragraph Width: Page
Initial Scale: Fit on Screen
Font Scale: AutoSized | +| `viewport content="width=device-width"` | Layout Width: device-width
Paragraph Width: Page
Initial Scale: 1.0
Font Scale: 1.0 | +| `viewport wide content` | Viewport Width: As specified
Paragraph Width: Page
Initial Scale: ?
Font Scale: AutoSized |