Skip to content

Commit 42f657e

Browse files
committed
直接使用Configuration.setLayoutDirection,而不是每个Activity创建时通过View.setLayoutDirection设置布局方向
1 parent 6aeb23a commit 42f657e

5 files changed

Lines changed: 16 additions & 20 deletions

File tree

app/src/main/java/com/hjq/language/demo/MainActivity.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import android.net.Uri;
88
import android.os.Build;
99
import android.os.Bundle;
10+
import android.text.TextUtils;
11+
import android.view.View;
1012
import android.webkit.WebChromeClient;
1113
import android.webkit.WebResourceRequest;
1214
import android.webkit.WebView;
@@ -199,9 +201,12 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
199201
public void onPageStarted(WebView view, String url, Bitmap favicon) {
200202
super.onPageStarted(view, url, favicon);
201203

202-
if (LocaleContract.shouldRTL(MultiLanguages.getAppLanguage(view.getContext()))) {
203-
// 水平滚动条滚动到最右边
204-
view.scrollTo(view.getWidth(), 0);
204+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
205+
Locale locale = MultiLanguages.getAppLanguage(view.getContext());
206+
if (View.LAYOUT_DIRECTION_RTL == TextUtils.getLayoutDirectionFromLocale(locale)) {
207+
// 水平滚动条滚动到最右边
208+
view.scrollTo(view.getWidth(), 0);
209+
}
205210
}
206211
}
207212
}

library/src/main/java/com/hjq/language/ActivityLanguages.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22

33
import android.app.Activity;
44
import android.app.Application;
5-
import android.os.Build;
65
import android.os.Bundle;
7-
import android.view.View;
8-
9-
import java.util.Locale;
106

117
/**
128
* author : Android 轮子哥
@@ -34,13 +30,6 @@ public void onActivityPreCreated(Activity activity, Bundle savedInstanceState) {
3430
@Override
3531
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
3632
refreshActivityAndApplicationLanguage(activity);
37-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
38-
Locale locale = MultiLanguages.getAppLanguage(activity);
39-
if (LocaleContract.shouldRTL(locale)) {
40-
View rootView = activity.findViewById(android.R.id.content);
41-
rootView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
42-
}
43-
}
4433
}
4534

4635
@Override

library/src/main/java/com/hjq/language/LanguagesUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ static void setLocale(Configuration config, Locale locale) {
4343
if (config.getLocales().get(0) != locale) {
4444
config.locale = locale;
4545
}
46+
config.setLayoutDirection(locale);
4647
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
4748
config.setLocale(locale);
49+
config.setLayoutDirection(locale);
4850
} else {
4951
config.locale = locale;
5052
}

library/src/main/java/com/hjq/language/LocaleContract.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -704,9 +704,4 @@ public static Locale getUzbekLocale() {
704704
}
705705
return sUzbekLocale;
706706
}
707-
708-
public static boolean shouldRTL(Locale locale) {
709-
return LocaleContract.getArabicLocale().equals(locale)
710-
|| LocaleContract.getHebrewLocale().equals(locale);
711-
}
712707
}

library/src/main/java/com/hjq/language/MultiLanguages.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import android.app.Application;
44
import android.content.Context;
5+
import android.content.res.Configuration;
56
import android.content.res.Resources;
7+
import android.os.Build;
68
import android.os.Looper;
79
import android.os.MessageQueue;
810
import android.text.TextUtils;
@@ -96,7 +98,10 @@ public static void updateAppLanguage(Context context, Resources resources) {
9698
return;
9799
}
98100
Locale locale = getAppLanguage(context);
99-
if (!locale.equals(LanguagesUtils.getLocale(resources.getConfiguration()))) {
101+
Configuration config = resources.getConfiguration();
102+
if (!locale.equals(LanguagesUtils.getLocale(config))
103+
|| (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1
104+
&& TextUtils.getLayoutDirectionFromLocale(locale) != config.getLayoutDirection())) {
100105
LanguagesUtils.updateLanguages(resources, locale);
101106
}
102107
if (!locale.equals(LanguagesUtils.getDefaultLocale())) {

0 commit comments

Comments
 (0)