Skip to content

Commit 690abf5

Browse files
committed
适配 RTL 特性
1 parent e59a68f commit 690abf5

22 files changed

Lines changed: 401 additions & 297 deletions

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
android:requestLegacyExternalStorage="true"
4343
android:resizeableActivity="true"
4444
android:roundIcon="@mipmap/launcher_ic"
45-
android:supportsRtl="false"
45+
android:supportsRtl="true"
4646
android:theme="@style/AppTheme"
4747
android:usesCleartextTraffic="true"
4848
tools:ignore="AllowBackup,LockedOrientationActivity"

app/src/main/java/com/hjq/demo/other/TitleBarStyle.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.graphics.drawable.ColorDrawable;
55
import android.graphics.drawable.Drawable;
6+
import android.view.View;
67
import android.widget.TextView;
78
import androidx.annotation.NonNull;
89
import androidx.appcompat.widget.AppCompatTextView;
@@ -41,6 +42,9 @@ public Drawable getTitleBarBackground(@NonNull Context context) {
4142

4243
@Override
4344
public Drawable getBackButtonDrawable(@NonNull Context context) {
45+
if (context.getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
46+
return ContextCompat.getDrawable(context, R.drawable.arrows_right_ic);
47+
}
4448
return ContextCompat.getDrawable(context, R.drawable.arrows_left_ic);
4549
}
4650

app/src/main/java/com/hjq/demo/ui/activity/SettingActivity.java

Lines changed: 53 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.hjq.demo.ui.activity;
22

3+
import android.graphics.drawable.Drawable;
34
import android.view.Gravity;
45
import android.view.View;
56
import androidx.annotation.NonNull;
@@ -36,10 +37,16 @@
3637
public final class SettingActivity extends AppActivity
3738
implements SwitchButton.OnCheckedChangeListener {
3839

39-
private SettingBar mLanguageView;
40-
private SettingBar mPhoneView;
41-
private SettingBar mPasswordView;
40+
private SettingBar mChangeLanguageView;
41+
private SettingBar mCheckUpdateView;
42+
private SettingBar mModifyPhoneView;
43+
private SettingBar mModifyPasswordView;
44+
private SettingBar mReadAgreementView;
45+
private SettingBar mAboutAppView;
46+
private SettingBar mAutoLoginView;
4247
private SettingBar mCleanCacheView;
48+
private SettingBar mExitLoginView;
49+
4350
private SwitchButton mAutoSwitchView;
4451

4552
@Override
@@ -49,28 +56,48 @@ protected int getLayoutId() {
4956

5057
@Override
5158
protected void initView() {
52-
mLanguageView = findViewById(R.id.sb_setting_language);
53-
mPhoneView = findViewById(R.id.sb_setting_phone);
54-
mPasswordView = findViewById(R.id.sb_setting_password);
55-
mCleanCacheView = findViewById(R.id.sb_setting_cache);
59+
mChangeLanguageView = findViewById(R.id.sb_setting_change_language);
60+
mCheckUpdateView = findViewById(R.id.sb_setting_check_update);
61+
mModifyPhoneView = findViewById(R.id.sb_setting_modify_phone);
62+
mModifyPasswordView = findViewById(R.id.sb_setting_modify_password);
63+
mReadAgreementView = findViewById(R.id.sb_setting_read_agreement);
64+
mAboutAppView = findViewById(R.id.sb_setting_about_app);
65+
mAutoLoginView = findViewById(R.id.sb_setting_auto_login);
66+
mCleanCacheView = findViewById(R.id.sb_setting_clear_cache);
67+
mExitLoginView = findViewById(R.id.sb_setting_exit_login);
68+
5669
mAutoSwitchView = findViewById(R.id.sb_setting_switch);
5770

71+
// 适配 RTL 特性
72+
Drawable iconDrawable;
73+
if (getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
74+
iconDrawable = getDrawable(R.drawable.arrows_left_ic);
75+
} else {
76+
iconDrawable = getDrawable(R.drawable.arrows_right_ic);
77+
}
78+
mChangeLanguageView.setEndDrawable(iconDrawable);
79+
mModifyPhoneView.setEndDrawable(iconDrawable);
80+
mModifyPasswordView.setEndDrawable(iconDrawable);
81+
mReadAgreementView.setEndDrawable(iconDrawable);
82+
mAboutAppView.setEndDrawable(iconDrawable);
83+
mAutoLoginView.setEndDrawable(iconDrawable);
84+
mCleanCacheView.setEndDrawable(iconDrawable);
85+
mExitLoginView.setEndDrawable(iconDrawable);
86+
5887
// 设置切换按钮的监听
5988
mAutoSwitchView.setOnCheckedChangeListener(this);
6089

61-
setOnClickListener(R.id.sb_setting_language, R.id.sb_setting_update, R.id.sb_setting_phone,
62-
R.id.sb_setting_password, R.id.sb_setting_agreement, R.id.sb_setting_about,
63-
R.id.sb_setting_cache, R.id.sb_setting_auto, R.id.sb_setting_exit);
90+
setOnClickListener(mChangeLanguageView, mCheckUpdateView, mModifyPhoneView, mModifyPasswordView,
91+
mReadAgreementView, mAboutAppView, mAutoLoginView, mCleanCacheView, mExitLoginView);
6492
}
6593

6694
@Override
6795
protected void initData() {
6896
// 获取应用缓存大小
69-
mCleanCacheView.setRightText(CacheDataManager.getTotalCacheSize(this));
70-
71-
mLanguageView.setRightText("简体中文");
72-
mPhoneView.setRightText("181****1413");
73-
mPasswordView.setRightText("密码强度较低");
97+
mCleanCacheView.setEndText(CacheDataManager.getTotalCacheSize(this));
98+
mChangeLanguageView.setEndText("简体中文");
99+
mModifyPhoneView.setEndText("181****1413");
100+
mModifyPasswordView.setEndText("密码强度较低");
74101
}
75102

76103
@Nullable
@@ -82,23 +109,22 @@ public View getImmersionBottomView() {
82109
@SingleClick
83110
@Override
84111
public void onClick(@NonNull View view) {
85-
int viewId = view.getId();
86-
if (viewId == R.id.sb_setting_language) {
112+
if (view == mChangeLanguageView) {
87113

88114
// 底部选择框
89115
new MenuDialog.Builder(this)
90116
// 设置点击按钮后不关闭对话框
91117
//.setAutoDismiss(false)
92118
.setList(R.string.setting_language_simple, R.string.setting_language_complex)
93119
.setListener((MenuDialog.OnListener<String>) (dialog, position, string) -> {
94-
mLanguageView.setRightText(string);
120+
mChangeLanguageView.setEndText(string);
95121
BrowserActivity.start(SettingActivity.this, "https://github.com/getActivity/MultiLanguages");
96122
})
97123
.setGravity(Gravity.BOTTOM)
98124
.setAnimStyle(BaseDialog.ANIM_BOTTOM)
99125
.show();
100126

101-
} else if (viewId == R.id.sb_setting_update) {
127+
} else if (view == mCheckUpdateView) {
102128

103129
// 本地的版本码和服务器的进行比较
104130
if (20 > AppConfig.getVersionCode()) {
@@ -113,32 +139,32 @@ public void onClick(@NonNull View view) {
113139
toast(R.string.update_no_update);
114140
}
115141

116-
} else if (viewId == R.id.sb_setting_phone) {
142+
} else if (view == mModifyPhoneView) {
117143

118144
new SafeDialog.Builder(this)
119145
.setListener((dialog, phone, code) -> PhoneResetActivity.start(this, code))
120146
.show();
121147

122-
} else if (viewId == R.id.sb_setting_password) {
148+
} else if (view == mModifyPasswordView) {
123149

124150
new SafeDialog.Builder(this)
125151
.setListener((dialog, phone, code) -> PasswordResetActivity.start(this, phone, code))
126152
.show();
127153

128-
} else if (viewId == R.id.sb_setting_agreement) {
154+
} else if (view == mReadAgreementView) {
129155

130156
BrowserActivity.start(this, "https://github.com/getActivity/Donate");
131157

132-
} else if (viewId == R.id.sb_setting_about) {
158+
} else if (view == mAboutAppView) {
133159

134160
startActivity(AboutActivity.class);
135161

136-
} else if (viewId == R.id.sb_setting_auto) {
162+
} else if (view == mAutoLoginView) {
137163

138164
// 自动登录
139165
mAutoSwitchView.setChecked(!mAutoSwitchView.isChecked());
140166

141-
} else if (viewId == R.id.sb_setting_cache) {
167+
} else if (view == mCleanCacheView) {
142168

143169
// 清除内存缓存(必须在主线程)
144170
GlideApp.get(this).clearMemory();
@@ -148,11 +174,11 @@ public void onClick(@NonNull View view) {
148174
GlideApp.get(SettingActivity.this).clearDiskCache();
149175
post(() -> {
150176
// 重新获取应用缓存大小
151-
mCleanCacheView.setRightText(CacheDataManager.getTotalCacheSize(SettingActivity.this));
177+
mCleanCacheView.setEndText(CacheDataManager.getTotalCacheSize(SettingActivity.this));
152178
});
153179
});
154180

155-
} else if (viewId == R.id.sb_setting_exit) {
181+
} else if (view == mExitLoginView) {
156182

157183
if (true) {
158184
startActivity(LoginActivity.class);

app/src/main/java/com/hjq/demo/ui/activity/account/PersonalDataActivity.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.hjq.demo.ui.activity.account;
22

3+
import android.graphics.drawable.Drawable;
34
import android.net.Uri;
45
import android.view.View;
56
import android.view.ViewGroup;
@@ -54,6 +55,16 @@ protected void initView() {
5455
mIdView = findViewById(R.id.sb_person_data_id);
5556
mNameView = findViewById(R.id.sb_person_data_name);
5657
mAddressView = findViewById(R.id.sb_person_data_address);
58+
59+
// 适配 RTL 特性
60+
Drawable iconDrawable;
61+
if (getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
62+
iconDrawable = getDrawable(R.drawable.arrows_left_ic);
63+
} else {
64+
iconDrawable = getDrawable(R.drawable.arrows_right_ic);
65+
}
66+
mAddressView.setEndDrawable(iconDrawable);
67+
5768
setOnClickListener(mAvatarLayout, mAvatarView, mNameView, mAddressView);
5869
}
5970

@@ -66,11 +77,11 @@ protected void initData() {
6677
.transform(new MultiTransformation<>(new CenterCrop(), new CircleCrop()))
6778
.into(mAvatarView);
6879

69-
mIdView.setRightText("880634");
70-
mNameView.setRightText("Android 轮子哥");
80+
mIdView.setEndText("880634");
81+
mNameView.setEndText("Android 轮子哥");
7182

7283
String address = mProvince + mCity + mArea;
73-
mAddressView.setRightText(address);
84+
mAddressView.setEndText(address);
7485
}
7586

7687
@SingleClick
@@ -92,16 +103,16 @@ public void onClick(@NonNull View view) {
92103
} else if (view == mNameView) {
93104
new InputDialog.Builder(this)
94105
.setTitle(getString(R.string.personal_data_name_hint))
95-
.setContent(mNameView.getRightText())
106+
.setContent(mNameView.getEndText())
96107
//.setHint(getString(R.string.personal_data_name_hint))
97108
//.setConfirm("确定")
98109
// 设置 null 表示不显示取消按钮
99110
//.setCancel("取消")
100111
// 设置点击按钮后不关闭对话框
101112
//.setAutoDismiss(false)
102113
.setListener((dialog, content) -> {
103-
if (!mNameView.getRightText().equals(content)) {
104-
mNameView.setRightText(content);
114+
if (!mNameView.getEndText().equals(content)) {
115+
mNameView.setEndText(content);
105116
}
106117
})
107118
.show();
@@ -116,11 +127,11 @@ public void onClick(@NonNull View view) {
116127
//.setIgnoreArea()
117128
.setListener((dialog, province, city, area) -> {
118129
String address = province + city + area;
119-
if (!mAddressView.getRightText().equals(address)) {
130+
if (!mAddressView.getEndText().equals(address)) {
120131
mProvince = province;
121132
mCity = city;
122133
mArea = area;
123-
mAddressView.setRightText(address);
134+
mAddressView.setEndText(address);
124135
}
125136
})
126137
.show();

app/src/main/java/com/hjq/demo/ui/activity/common/ImagePreviewActivity.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ public static void start(@NonNull Context context, @NonNull List<String> urls, i
7070
}
7171

7272
private ViewPager2 mViewPager2;
73-
private ImagePreviewAdapter mAdapter;
73+
74+
@NonNull
75+
private final ImagePreviewAdapter mAdapter = new ImagePreviewAdapter(this);
7476

7577
/** 圆圈指示器 */
7678
private CircleIndicator3 mCircleIndicatorView;
@@ -83,7 +85,14 @@ public static void start(@NonNull Context context, @NonNull List<String> urls, i
8385
@SuppressLint("SetTextI18n")
8486
@Override
8587
public void onPageSelected(int position) {
86-
mTextIndicatorView.setText((position + 1) + "/" + mAdapter.getCount());
88+
// 适配 RTL 特性
89+
String text;
90+
if (mAdapter.getContext().getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
91+
text = mAdapter.getCount() + "/" + (position + 1);
92+
} else {
93+
text = (position + 1) + "/" + mAdapter.getCount();
94+
}
95+
mTextIndicatorView.setText(text);
8796
}
8897
};
8998

@@ -107,7 +116,6 @@ protected void initData() {
107116
finish();
108117
return;
109118
}
110-
mAdapter = new ImagePreviewAdapter(this);
111119
mAdapter.setData(images);
112120
mAdapter.setOnItemClickListener(this);
113121
mViewPager2.setAdapter(mAdapter);

app/src/main/java/com/hjq/demo/ui/dialog/common/AddressDialog.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,8 @@ public AppViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position)
450450
(int) getResources().getDimension(R.dimen.dp_10),
451451
(int) getResources().getDimension(R.dimen.dp_20),
452452
(int) getResources().getDimension(R.dimen.dp_10));
453+
// 适配 RTL 特性
454+
textView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
453455
return new ViewHolder(textView);
454456
}
455457

0 commit comments

Comments
 (0)