第一言語が英語で第二言語がアラビア語の多言語アプリがあります。
ドキュメントに記載されているように、
android:supportsRtl="true"
マニフェストに追加しました。left
およびright
属性を持つすべての xml プロパティをそれぞれ および に変更しstart
ましend
た。- アラビア語の文字列を追加しました
strings-ar
(他のリソースについても同様です)。
上記のセットアップは正常に機能します。を に変更するLocale
とar-AE
、アクティビティにアラビア語のテキストとリソースが正しく表示されます。
ただし、および/または
Activity
を使用してに移動するたびに、ロケール、テキスト、およびレイアウトの方向が突然デバイスのデフォルトに戻ります。WebView
WebViewClient
さらなるヒント:
- これは、 Android 7.0を搭載した Nexus 6P でのみ発生します。Android 6.0.1 以下ではすべて正常に動作します。
- ロケールの突然のシフトは、および/またはを含む に移動した場合にのみ発生します(そして、いくつかあります)。他のアクティビティでは発生しません。
Activity
WebView
WebViewClient
Android 7.0 ではマルチロケールがサポートされているため、ユーザーは複数のデフォルト ロケールを設定できます。したがって、プライマリロケールを次のように設定するとLocale.UK
:
次に に移動すると
WebView
、ロケールが からar-AE
に変わりますen-GB
。
Android 7.0 API の変更:
API 変更のリスト に示されているように、ロケールに関連する新しいメソッドが API 24 の次のクラスに追加されました。
Locale
:
Configuration
:
ただし、API 23 を使用してアプリを構築しており、これらの新しいメソッドは使用していません。
さらに ...
この問題は、Nexus 6P エミュレーターでも発生します。
デフォルトのロケールを取得するために、私は
Locale.getDefault()
.デフォルトのロケールを設定するために、次のコードを使用しています。
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()); }
以前にこの問題に遭遇した人はいますか? その理由は何ですか?どうすれば解決できますか?
参考文献: