diff --git a/app/src/main/java/com/hjq/language/demo/MainActivity.java b/app/src/main/java/com/hjq/language/demo/MainActivity.java
index dc79a9f..3988f2d 100644
--- a/app/src/main/java/com/hjq/language/demo/MainActivity.java
+++ b/app/src/main/java/com/hjq/language/demo/MainActivity.java
@@ -3,9 +3,12 @@
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
@@ -54,7 +57,7 @@ protected void onCreate(Bundle savedInstanceState) {
getApplication().getResources().getString(R.string.current_language));
mSystemLanguageView = findViewById(R.id.tv_main_language_system);
mSystemLanguageView.setText(MultiLanguages.getLanguageString(this,
- MultiLanguages.getSystemLanguage(this), R.string.current_language));
+ MultiLanguages.getSystemLanguage(this), R.string.current_language));
if (MultiLanguages.isSystemLanguage(this)) {
radioGroup.check(R.id.rb_main_language_auto);
@@ -66,6 +69,8 @@ protected void onCreate(Bundle savedInstanceState) {
radioGroup.check(R.id.rb_main_language_tw);
} else if (LocaleContract.getEnglishLocale().equals(locale)) {
radioGroup.check(R.id.rb_main_language_en);
+ } else if (LocaleContract.getArabicLocale().equals(locale)) {
+ radioGroup.check(R.id.rb_main_language_ar);
} else {
radioGroup.check(R.id.rb_main_language_auto);
}
@@ -94,6 +99,9 @@ public void onCheckedChanged(RadioGroup group, int checkedId) {
} else if (checkedId == R.id.rb_main_language_en) {
// 英语
restart = MultiLanguages.setAppLanguage(this, LocaleContract.getEnglishLocale());
+ } else if (checkedId == R.id.rb_main_language_ar) {
+ // 阿拉伯语
+ restart = MultiLanguages.setAppLanguage(this, LocaleContract.getArabicLocale());
}
if (restart) {
@@ -130,7 +138,7 @@ public void onResume() {
return;
}
mSystemLanguageView.setText(MultiLanguages.getLanguageString(this,
- MultiLanguages.getSystemLanguage(this), R.string.current_language));
+ MultiLanguages.getSystemLanguage(this), R.string.current_language));
}
@Override
@@ -189,6 +197,18 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
}
return true;
}
+ @Override
+ public void onPageCommitVisible(WebView view, String url) {
+ super.onPageCommitVisible(view, url);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ Locale locale = MultiLanguages.getAppLanguage(view.getContext());
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils.getLayoutDirectionFromLocale(locale)) {
+ // 水平滚动条滚动到最右边
+ view.scrollTo(view.getWidth(), 0);
+ }
+ }
+ }
}
/**
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 97c9296..d65cd7b 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -48,6 +48,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
+ android:layout_marginStart="15dp"
android:text="简体" />
+
+
@@ -100,7 +112,8 @@
android:id="@+id/tv_main_language_application"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="20dp" />
+ android:layout_marginLeft="20dp"
+ android:layout_marginStart="20dp" />
+ android:layout_marginLeft="20dp"
+ android:layout_marginStart="20dp" />
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000..c023c10
--- /dev/null
+++ b/app/src/main/res/values-ar/strings.xml
@@ -0,0 +1,9 @@
+
+
+ تدويل
+ اتبع النظام
+
+ النشاط الحالي اللغة:
+ لغة التطبيق الحالية:
+ لغة النظام الحالية:
+
\ No newline at end of file
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index 33915b1..8a9c2a3 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -1,2 +1,5 @@
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/language/LanguagesUtils.java b/library/src/main/java/com/hjq/language/LanguagesUtils.java
index 2226242..f36f612 100644
--- a/library/src/main/java/com/hjq/language/LanguagesUtils.java
+++ b/library/src/main/java/com/hjq/language/LanguagesUtils.java
@@ -39,8 +39,14 @@ static void setLocale(Configuration config, Locale locale) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList localeList = new LocaleList(locale);
config.setLocales(localeList);
+ // 在一台Android13的联想平板上,setLocales和setLocale均无效,修改config.locale生效,所以这里判断一下是否设置成功
+ if (config.getLocales().get(0) != locale) {
+ config.locale = locale;
+ }
+ config.setLayoutDirection(locale);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
config.setLocale(locale);
+ config.setLayoutDirection(locale);
} else {
config.locale = locale;
}
diff --git a/library/src/main/java/com/hjq/language/MultiLanguages.java b/library/src/main/java/com/hjq/language/MultiLanguages.java
index db3ddfc..118425b 100644
--- a/library/src/main/java/com/hjq/language/MultiLanguages.java
+++ b/library/src/main/java/com/hjq/language/MultiLanguages.java
@@ -2,7 +2,9 @@
import android.app.Application;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.Resources;
+import android.os.Build;
import android.os.Looper;
import android.os.MessageQueue;
import android.text.TextUtils;
@@ -96,7 +98,10 @@ public static void updateAppLanguage(Context context, Resources resources) {
return;
}
Locale locale = getAppLanguage(context);
- if (!locale.equals(LanguagesUtils.getLocale(resources.getConfiguration()))) {
+ Configuration config = resources.getConfiguration();
+ if (!locale.equals(LanguagesUtils.getLocale(config))
+ || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1
+ && TextUtils.getLayoutDirectionFromLocale(locale) != config.getLayoutDirection())) {
LanguagesUtils.updateLanguages(resources, locale);
}
if (!locale.equals(LanguagesUtils.getDefaultLocale())) {