We often take mobile web browsing for granted, but sometimes the simplest of problems can turn it into a miserable experience. One of the early improvements to Android’s built-in web browser was a neat little feature that allowed text to re-wrap based on zoom level. It’s an obvious function, something that seems natural for reading more than a few words on a small screen. Unfortunately, a significant change in Android 4.4 resulted in the loss of this incredibly convenient capability for most web browsers and several applications. Not only does this affect browsers that rely on the built-in layout engine, it also applies to every app that relies on an embedded WebView.
A lot of people probably haven’t even noticed the difference because it can be subtle on well designed web pages and may not even apply to pages designed for mobile devices. In older versions of Android, zooming in on a column of text, especially with a double-tap, would automatically enlarge and re-wrap the text so that it fit within the edges of the screen. The result was easily readable and didn’t require sliding the screen back and forth to see each line. The screenshots below are a good example of before-and-after.
- Left: Jellybean, Right: KitKat
Text reflow was not technically an automatic feature of the WebView, but something that app developers could easily enable by simply enabling NARROW_COLUMNS and SINGLE_COLUMN. It turns out that both of those settings are no longer supported or functional in KitKat, even for apps that still target older versions of the API. This appears to have been a side-effect of swapping out the old WebKit rendering engine for the new Blink engine.
You see, back in April 2013, Google announced that its Chromium Project, the open source component of the Chrome web browser, would be forking WebKit to create a custom layout engine called Blink. The intent was to remove some clutter and add deeper customizations. Chrome for Android officially made the switch in July with v28, and the AOSP WebView followed suit with KitKat in October. Despite being based on WebKit, which was able to reflow text, Blink seems to lack this ability. It's worth pointing out that one of the longest standing criticisms of Chrome for Android is that text reflow has always been disabled.
What Is Affected?
Losing text reflow in Chrome and the AOSP browser is certainly a problem, but it reaches farther than just a couple of browsers; anything relying on the WebView class has lost this feature. Some popular alternative browsers like Dolphin and Lightning offer their own customizations, but still use the built-in WebView for rendering. Naturally, we can also see this issue popping up in several apps that include embedded browser windows, something commonly found in Twitter clients, forum readers, RSS clients, and many others. Even some eBook readers have been known to render content to a WebView.
Left: Gmail on Jellybean, Right: Gmail on KitKat
No Fix Coming
The bad news is that it appears Google intended to remove reflow and there's no going back. There is a section on the Android Developer site dedicated to migrating web apps to the KitKat WebView, which clearly states that single and narrow column layouts are no longer supported. Judging by the language used in that section, it appears that this was an intentional move. If that isn't enough confirmation, this issue has been declared "Working As Intended" and a project member has clearly stated that there are no plans to change course.
It's not clear why text reflow would be a target for removal, but another closely timed event might offer some hints. Less than two months after the announcement of Blink, Google declared it would begin down-ranking websites that didn't serve smartphones. This could certainly be a coincidence and there's no firm reason to connect the two, but it may suggest Google is subtly (and very forceful) pushing web developers to focus on mobile devices. Of course, this is just speculation.
Since we know reflow didn't just disappear because of an oversight, it may be worth shopping around for software that can offer it. A good starting point is Opera for Android which has long been based on WebKit and offers many of the same features as Chrome. It followed Chrome in making the switch to Blink, but reflow has been implemented independently. You'll have to manually enable the feature by switching on Menu -> Settings -> Text Wrap, but it works exactly like you would expect.
There are plenty of other browsers with text reflow, as well. Firefox for Android is a popular option, but it may not be as consistent as Opera and hasn't had the best year for security issues. Another option is Dolphin with the Jetpack extension, but potential users should be warned that Dolphin is known to track the urls you visit. Of course, you can also try Dolphin Zero which doesn't phone home, but it might be less convenient depending on your usage.
Switching browsers might be good for basic browsing, but it doesn't solve the issue for apps that rely on a WebView for more basic purposes. Unfortunately, there's no way to bring this functionality back without modifying the underlying firmware.
Some custom ROMs like CyanogenMod have taken to reverting back to the AOSP browser code from Android 4.3. Update: Nevermind, they abandoned that plan.
Developers will find themselves in varying situations. If they can directly control the content being rendered by the WebView, such as eBook readers and web apps, it's probably best to just make these pages mobile-friendly. As a shortcut that closely emulates the old behavior, give a shot to this method posted on StackOverflow. For apps that have no control over the content, you may want to try the WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING algorithm or just leave it on the default layout and hope for the best. Neither option is desirable, but the alternative is to fire off an Intent and let the user pick a browser to view pages in.
Calling this a bug might be a bit inaccurate - it seems like Google intended to remove text reflow. Maybe the search giant really is tired of waiting on web developers to support mobile devices and decided to be more aggressive about it. Perhaps this is just a precursor to Google introducing an improved and more intelligent algorithm. After all, the method of forcing content into a single narrow column was a bit hack-ish and prone to its own set of bad behaviors. Whatever the case may be, besides hoping for a quick turnaround from the greater world of web development, there isn't much we can do.
Source: AOSP Issue Tracker,