语言选择
This commit is contained in:
@@ -174,7 +174,7 @@ dependencies {
|
||||
implementation 'com.github.ns3chz:Picker:1.0.2'
|
||||
implementation 'com.github.zzy0516alex:FileSelectorRelease:v6.2'
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.3.1'//(最低版本)
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'//(最低版本)
|
||||
// implementation 'com.umeng.umsdk:share-wx:7.1.5' //微信完整版
|
||||
// implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.0'//微信官方依赖库,必选
|
||||
//商品评价星星
|
||||
|
||||
@@ -71,7 +71,9 @@
|
||||
android:theme="@style/custom_app_theme"
|
||||
android:supportsRtl="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:networkSecurityConfig="@xml/network_security_config">
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:localeConfig="@xml/locale_config"
|
||||
tools:replace="android:localeConfig">
|
||||
<!-- 高德地图 -->
|
||||
<meta-data android:name="com.amap.api.v2.apikey" android:value="a91364c6bbc2f5c773a949926fae7fb6">
|
||||
</meta-data>
|
||||
|
||||
@@ -50,5 +50,7 @@ public class ConstantUtil {
|
||||
/***************设备相关*******************/
|
||||
//设备解绑成功广播
|
||||
public static final String DEVICE_UNBIND_SUCCESS = "device_unbind_success";
|
||||
//应用语言设置
|
||||
public static final String KEY_APP_LANGUAGE = "key_app_language";
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.google.gson.Gson;
|
||||
import com.ckkj.water.login.entity.LoginEntity;
|
||||
import com.ckkj.water.network.NetWorkManager;
|
||||
import com.ckkj.water.utils.dataUtil.SharePreUtil;
|
||||
import com.ckkj.water.utils.manager.LanguageManager;
|
||||
import com.ckkj.water.utils.manager.WaterUserInfoManager;
|
||||
|
||||
import java.util.List;
|
||||
@@ -67,6 +68,9 @@ public class MyApplication extends Application {
|
||||
instance = this;
|
||||
context = getApplicationContext();
|
||||
|
||||
// 恢复应用语言设置
|
||||
applyStoredLocale();
|
||||
|
||||
boolean isUserAgreed = SharePreUtil.getBoolean(ConstantUtil.SHARE_PRE_NAME,context,ConstantUtil.PRIVACY_POLICY_AGREED);
|
||||
if(isUserAgreed){
|
||||
initializeUmengSDK();
|
||||
@@ -178,4 +182,12 @@ public class MyApplication extends Application {
|
||||
public static Context getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用启动时恢复保存的语言设置
|
||||
* 使用 AppCompatDelegate.setApplicationLocales() API
|
||||
*/
|
||||
private void applyStoredLocale() {
|
||||
LanguageManager.applyStoredLocale();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.ckkj.water.utils.manager.LanguageManager;
|
||||
import com.google.gson.Gson;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.ckkj.water.AppConfig;
|
||||
@@ -206,20 +207,24 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
break;
|
||||
|
||||
case R.id.tv_language:
|
||||
new XPopup.Builder(mContext).asBottomList(
|
||||
"选择语言",
|
||||
new String[]{"中文", "English"},
|
||||
new int[]{R.mipmap.icon_langage_chinese, R.mipmap.icon_langage_eng},
|
||||
0,
|
||||
new OnSelectListener() {
|
||||
@Override
|
||||
public void onSelect(int position, String text) {
|
||||
ToastUtil.showShort(mContext,text);
|
||||
}
|
||||
},
|
||||
R.layout.select_language_layout,
|
||||
R.layout.select_language_item
|
||||
).show();
|
||||
new XPopup.Builder(mContext)
|
||||
.isDestroyOnDismiss(true)
|
||||
.dismissOnBackPressed(true)
|
||||
.dismissOnTouchOutside(true)
|
||||
.asBottomList(
|
||||
getString(R.string.change_language),
|
||||
LanguageManager.getLanguageDisplayNames(mContext),
|
||||
LanguageManager.getLanguageIcons(),
|
||||
LanguageManager.getCurrentLanguageIndex(),
|
||||
new OnSelectListener() {
|
||||
@Override
|
||||
public void onSelect(int position, String text) {
|
||||
LanguageManager.switchLanguageByIndex(position, LoginActivity.this);
|
||||
}
|
||||
},
|
||||
R.layout.select_language_layout,
|
||||
R.layout.select_language_item
|
||||
).show();
|
||||
break;
|
||||
|
||||
case R.id.tv_reset_psd ://重置密码
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ckkj.water.mine;
|
||||
|
||||
import static android.view.View.INVISIBLE;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
@@ -22,6 +23,7 @@ import com.ckkj.water.mine.mvp.MinePresenter;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.utils.dataUtil.SharePreUtil;
|
||||
import com.ckkj.water.utils.manager.ActivityManager;
|
||||
import com.ckkj.water.utils.manager.LanguageManager;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.ckkj.water.utils.manager.WaterUserInfoManager;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
@@ -92,14 +94,14 @@ public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding,
|
||||
.dismissOnBackPressed(true)
|
||||
.dismissOnTouchOutside(true)
|
||||
.asBottomList(
|
||||
"选择语言",
|
||||
new String[]{"中文", "English"},
|
||||
new int[]{R.mipmap.icon_langage_chinese, R.mipmap.icon_langage_eng},
|
||||
0,
|
||||
getString(R.string.change_language),
|
||||
LanguageManager.getLanguageDisplayNames(mContext),
|
||||
LanguageManager.getLanguageIcons(),
|
||||
LanguageManager.getCurrentLanguageIndex(),
|
||||
new OnSelectListener() {
|
||||
@Override
|
||||
public void onSelect(int position, String text) {
|
||||
ToastUtil.showShort(mContext,text);
|
||||
LanguageManager.switchLanguageByIndex(position, getActivity());
|
||||
}
|
||||
},
|
||||
R.layout.select_language_layout,
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
package com.ckkj.water.utils.manager;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.core.os.LocaleListCompat;
|
||||
|
||||
import com.ckkj.water.AppConfig;
|
||||
import com.ckkj.water.ConstantUtil;
|
||||
import com.ckkj.water.MyApplication;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.login.LoginActivity;
|
||||
import com.ckkj.water.main.activity.MainActivity;
|
||||
import com.ckkj.water.utils.dataUtil.SharePreUtil;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
|
||||
/**
|
||||
* 语言切换管理工具类
|
||||
* 使用 AppCompatDelegate.setApplicationLocales() API 实现中英切换
|
||||
*/
|
||||
public class LanguageManager {
|
||||
|
||||
private static final String TAG = "LanguageManager";
|
||||
|
||||
/**
|
||||
* 语言类型枚举
|
||||
*/
|
||||
public enum LanguageType {
|
||||
CHINESE(0, "zh", "中文"),
|
||||
ENGLISH(1, "en", "English");
|
||||
|
||||
public final int index;
|
||||
public final String languageTag;
|
||||
public final String displayName;
|
||||
|
||||
LanguageType(int index, String languageTag, String displayName) {
|
||||
this.index = index;
|
||||
this.languageTag = languageTag;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public static LanguageType fromIndex(int index) {
|
||||
for (LanguageType type : values()) {
|
||||
if (type.index == index) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return CHINESE;
|
||||
}
|
||||
|
||||
public static LanguageType fromLanguageTag(String languageTag) {
|
||||
if ("en".equals(languageTag)) {
|
||||
return ENGLISH;
|
||||
}
|
||||
return CHINESE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前语言类型
|
||||
*/
|
||||
public static LanguageType getCurrentLanguageType() {
|
||||
LocaleListCompat locales = AppCompatDelegate.getApplicationLocales();
|
||||
if (locales.isEmpty()) {
|
||||
return LanguageType.CHINESE;
|
||||
}
|
||||
String language = locales.get(0).getLanguage();
|
||||
return LanguageType.fromLanguageTag(language);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前语言索引 (0: 中文, 1: 英文)
|
||||
*/
|
||||
public static int getCurrentLanguageIndex() {
|
||||
return getCurrentLanguageType().index;
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换语言
|
||||
* @param languageType 要切换到的语言类型
|
||||
*/
|
||||
public static void switchLanguage(LanguageType languageType) {
|
||||
switchLanguage(languageType, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换语言并重启应用
|
||||
* @param languageType 要切换到的语言类型
|
||||
* @param activity 触发切换的Activity(用于重启)
|
||||
*/
|
||||
public static void switchLanguage(LanguageType languageType, Activity activity) {
|
||||
// 先保存语言设置
|
||||
saveLanguage(languageType.languageTag);
|
||||
|
||||
// 设置应用语言
|
||||
LocaleListCompat localeList = LocaleListCompat.forLanguageTags(languageType.languageTag);
|
||||
AppCompatDelegate.setApplicationLocales(localeList);
|
||||
|
||||
// 如果传入了Activity,则重启应用
|
||||
if (activity != null) {
|
||||
ToastUtil.showShort(activity, activity.getString(R.string.language_switch_success));
|
||||
|
||||
// 延迟重启应用,确保语言设置生效
|
||||
new android.os.Handler(android.os.Looper.getMainLooper()).postDelayed(() -> {
|
||||
try {
|
||||
boolean isLogin = AppConfig.USER_LOGIN || SharePreUtil.getBoolean(
|
||||
ConstantUtil.SHARE_PRE_NAME,
|
||||
activity,
|
||||
ConstantUtil.USER_LOGIN
|
||||
);
|
||||
ActivityManager.removeAllActivity();
|
||||
Intent intent = new Intent(activity, isLogin ? MainActivity.class : LoginActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
activity.startActivity(intent);
|
||||
System.exit(0);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换语言(通过索引)
|
||||
* @param position 0: 中文, 1: 英文
|
||||
*/
|
||||
public static void switchLanguageByIndex(int position) {
|
||||
switchLanguage(LanguageType.fromIndex(position), null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换语言并重启应用(通过索引)
|
||||
* @param position 0: 中文, 1: 英文
|
||||
* @param activity 触发切换的Activity
|
||||
*/
|
||||
public static void switchLanguageByIndex(int position, Activity activity) {
|
||||
switchLanguage(LanguageType.fromIndex(position), activity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存语言设置到本地
|
||||
*/
|
||||
public static void saveLanguage(String languageTag) {
|
||||
SharePreUtil.putString(ConstantUtil.SHARE_PRE_NAME,
|
||||
MyApplication.getContext(),
|
||||
ConstantUtil.KEY_APP_LANGUAGE,
|
||||
languageTag);
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用启动时恢复保存的语言设置
|
||||
* 应该在 Application.onCreate() 中调用
|
||||
*/
|
||||
public static void applyStoredLocale() {
|
||||
String savedLocale = SharePreUtil.getString(
|
||||
ConstantUtil.SHARE_PRE_NAME,
|
||||
MyApplication.getContext(),
|
||||
ConstantUtil.KEY_APP_LANGUAGE);
|
||||
|
||||
if (savedLocale != null && !savedLocale.isEmpty()) {
|
||||
LocaleListCompat localeList = LocaleListCompat.forLanguageTags(savedLocale);
|
||||
AppCompatDelegate.setApplicationLocales(localeList);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取语言选择列表的显示文本
|
||||
*/
|
||||
public static String[] getLanguageDisplayNames(Context context) {
|
||||
return new String[]{
|
||||
context.getString(R.string.language_chinese),
|
||||
context.getString(R.string.language_english)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取语言选择列表的图标资源ID
|
||||
*/
|
||||
public static int[] getLanguageIcons() {
|
||||
return new int[]{
|
||||
R.mipmap.icon_langage_chinese,
|
||||
R.mipmap.icon_langage_eng
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,10 @@
|
||||
<string name="get_verifi_code">获取验证码</string>
|
||||
<string name="btn_login">登录</string>
|
||||
<string name="go_register">立即注册</string>
|
||||
<string name="change_language">语言选择</string>
|
||||
<string name="change_language">Language</string>
|
||||
<string name="language_chinese">中文</string>
|
||||
<string name="language_english">English</string>
|
||||
<string name="language_switch_success">Language changed</string>
|
||||
<string name="reset_psd">忘记密码</string>
|
||||
<string name="hint_input_old_psd">请输入原密码</string>
|
||||
<string name="hint_input_psd">请输入密码</string>
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
<string name="btn_login">登录</string>
|
||||
<string name="go_register">立即注册</string>
|
||||
<string name="change_language">语言选择</string>
|
||||
<string name="language_chinese">中文</string>
|
||||
<string name="language_english">English</string>
|
||||
<string name="language_switch_success">语言切换成功</string>
|
||||
<string name="reset_psd">忘记密码</string>
|
||||
<string name="hint_input_psd">请输入密码</string>
|
||||
<string name="hint_input_old_psd">请输入原密码</string>
|
||||
|
||||
5
app/src/main/res/xml/locale_config.xml
Normal file
5
app/src/main/res/xml/locale_config.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<locale android:name="zh" />
|
||||
<locale android:name="en" />
|
||||
</locale-config>
|
||||
Reference in New Issue
Block a user