Android - WebView-Sprache ändert sich abrupt auf Android N

Ich habe eine mehrsprachige App mit der Primärsprache Englisch und der Sekundärsprache Arabisch.

Wie im @ beschriebDokumentatio,

Ich habe hinzugefügtandroid:supportsRtl="true" im Manifest.Ich habe alle XML-Eigenschaften mit @ geändeleft undright Attribute zustart undend beziehungsweiseIch habe arabische Sprachstrings in @ hinzugefüstrings-ar (und ähnlich für andere Ressourcen).

Das obige Setup funktioniert ordnungsgemäß. Nach dem Ändern desLocale zuar-AE, Arabischer Text und Ressourcen werden in meinen Aktivitäten korrekt angezeigt.

Jedoch jedes Mal, wenn ich zu einem @ navigieActivity mit einerWe,bView und / oder einWebViewClient, das Gebietsschema, der Text und die Layoutrichtung werden abrupt auf die Standardeinstellungen des Geräts zurückgesetzt.

Weitere Hinweise:

Dies geschiehtnu auf einem Nexus 6P mitAndroid 7.0. Unter Android 6.0.1 und darunter funktioniert alles einwandfrei. Die abrupte Verschiebung in der Ländereinstellung passiertnu wenn ich zu einem @ navigieActivity das hat einWebView und / oder einWebViewClient (und ich habe mehrere). Es tritt bei keiner der anderen Aktivitäten auf.

Android 7.0 unterstützt mehrere Ländereinstellungen, sodass der Benutzer mehr als eine Standardländereinstellung festlegen kann. Wenn ich also das primäre Gebietsschema auf @ setLocale.UK:

Dann bei der Navigation zumWebView, das Gebietsschema ändert sich vonar-AE zuen-GB.

Android 7.0 API-Änderungen:

Wie im @ angegeb Liste der API-Änderungen, den folgenden Klassen in API 24 wurden neue Methoden für das Gebietsschema hinzugefügt:

Locale:

Locale.getDefault(...)Locale.setDefault(...)

Configuration:

getLocales()setLocales(...)

Ich erstelle meine App jedoch mit API 23 und verwende keine dieser neuen Methoden.

Außerdem ..

Das Problem tritt auch beim Nexus 6P-Emulator auf.

Um das Standardgebietsschema zu erhalten, verwende ichLocale.getDefault().

Um das Standardgebietsschema festzulegen, verwende ich den folgenden Code:

public static void setLocale(Locale locale){
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.setLocale(locale);
    Context context = MyApplication.getInstance();
    context.getResources().updateConfiguration(config,
            context.getResources().getDisplayMetrics());
}

Hat jemand dieses Problem schon einmal? Was ist der Grund dafür und wie löse ich das?

Verweise

1. Native RTL-Unterstützung in Android 4.2.

2. Multilingual Support - Sprache und Gebietsschema.

3 Seien Sie vorsichtig mit dem Standardgebietsschema.

Antworten auf die Frage(16)

Ihre Antwort auf die Frage