Ted Hopp's answer managed to solve the problem, but he did not answer the question of why this is happening.
The reason is the changes made to the WebView class and its support package in Android 7.0.
Reference Information:
Android WebView built using WebKit . Although it was originally part of AOSP, starting with KitKat it was decided to separate WebView into a separate component called Android System WebView . In fact, this is an Android system application that is preinstalled on Android devices. It is periodically updated, as well as other system applications, such as Google Play Services and the Play Store application. You can see it in the list of installed system applications:

Changes in Android 7.0 :
Starting with Android N, the Chrome app will be used to render any / all WebView in third-party Android apps. In phones with Android N installed, the Android WebView System application is not available at all. On devices that have received an OTA update to Android N, the Android System web view is disabled:

and

In addition, support for multiple locales was introduced when devices have more than one default language:

This is important for multi-language applications. If your application has WebView , then they are displayed using the Chrome application. Since Chrome itself is an Android application and runs in its own isolated sandbox, it will not be bound to the locale installed by your application. Instead, Chrome will revert to the deviceโs main locale. For example, let's say your application locale is set to ar-AE , and the deviceโs locale is en-US . In this case, the Activity locale containing the WebView will change from ar-AE to en-US , and the rows and resources from the corresponding locale folders will be displayed. You can see the mix of LTR and RTL lines / resources on those WebView that have WebView s.
Decision:
A complete solution to this problem consists of two steps:
STEP 1:
First reset the default locale manually in each Activity or at least in every Activity that has a WebView .
public static void setLocale(Locale locale){ Context context = MyApplication.getInstance(); Resources resources = context.getResources(); Configuration configuration = resources.getConfiguration(); Locale.setDefault(locale); configuration.setLocale(locale); if (Build.VERSION.SDK_INT >= 25) { context = context.getApplicationContext().createConfigurationContext(configuration); context = context.createConfigurationContext(configuration); } context.getResources().updateConfiguration(configuration, resources.getDisplayMetrics()); }
Call the above method before calling setContentView(...) in the onCreate() method of all your actions. The locale parameter must be the default Locale that you want to set. For example, if you want to set Arabic / UAE as the default locale, you must pass new Locale("ar", "AE") . Or, if you want to set the default language (that is, Locale , which is automatically installed by the operating system), you must pass Locale.US .
STEP 2:
In addition, you need to add the following line of code:
new WebView(this).destroy();
in onCreate() your Application class (if you have one) and wherever the user can change the language. This will take care of all kinds of extreme cases that may occur when you restart the application after changing the language (you might notice lines in other languages โโor with the opposite alignment after changing the language to Activities that have WebView on Android 7. 0 ++).
As a complement , Chrome custom tabs are now the preferred way to display web pages in the app.
References:
1. Android7.0 - changes for WebView .
2. Understanding security fixes for WebView and Android .
3. WebView for Android .
4. WebView: from "Powered by Chrome" to "Chrome . "
5. NougatWebView .
6. Android7.0 Nougat .
7. Secrets Android N, part 1: Android System WebView is now just "Chrome"? .