修改心愿单生成
This commit is contained in:
parent
a86cf97d74
commit
153d5ff159
@ -6,6 +6,8 @@
|
|||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.CALL_PHONE"
|
android:name="android.permission.CALL_PHONE"
|
||||||
tools:node="remove" />
|
tools:node="remove" />
|
||||||
|
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"
|
||||||
|
tools:ignore="ProtectedPermissions" />
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.READ_LOGS"
|
android:name="android.permission.READ_LOGS"
|
||||||
tools:ignore="ProtectedPermissions"
|
tools:ignore="ProtectedPermissions"
|
||||||
@ -92,6 +94,7 @@
|
|||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:largeHeap="true"
|
android:largeHeap="true"
|
||||||
|
android:supportsRtl="true"
|
||||||
android:preserveLegacyExternalStorage="true"
|
android:preserveLegacyExternalStorage="true"
|
||||||
android:requestLegacyExternalStorage="true"
|
android:requestLegacyExternalStorage="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
|
@ -39,6 +39,7 @@ import com.yunbao.common.manager.imrongcloud.InstructorSendRewardProvider;
|
|||||||
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
|
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
|
||||||
import com.yunbao.common.manager.imrongcloud.RecommendLiveRoom;
|
import com.yunbao.common.manager.imrongcloud.RecommendLiveRoom;
|
||||||
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
|
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
|
||||||
|
import com.yunbao.common.utils.AppManager;
|
||||||
import com.yunbao.common.utils.L;
|
import com.yunbao.common.utils.L;
|
||||||
import com.yunbao.common.utils.SpUtil;
|
import com.yunbao.common.utils.SpUtil;
|
||||||
import com.yunbao.live.socket.SocketRyClient;
|
import com.yunbao.live.socket.SocketRyClient;
|
||||||
@ -104,12 +105,14 @@ public class AppContext extends CommonAppContext {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AppManager.getInstance().removeActivity(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
|
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
|
||||||
activities.add(new WeakReference<>(activity));
|
activities.add(new WeakReference<>(activity));
|
||||||
CrashSaveBean.getInstance().setActivitySize(activities);
|
CrashSaveBean.getInstance().setActivitySize(activities);
|
||||||
|
AppManager.getInstance().addActivity(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -43,14 +43,14 @@ public abstract class AbsActivity extends AppCompatActivity {
|
|||||||
protected List<LifeCycleListener> mLifeCycleListeners;
|
protected List<LifeCycleListener> mLifeCycleListeners;
|
||||||
protected boolean isFullWindow;
|
protected boolean isFullWindow;
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
public Resources getResources() {
|
// public Resources getResources() {
|
||||||
Resources res = super.getResources();
|
// Resources res = super.getResources();
|
||||||
Configuration config = new Configuration();
|
// Configuration config = new Configuration();
|
||||||
config.setToDefaults();
|
// config.setToDefaults();
|
||||||
res.updateConfiguration(config, res.getDisplayMetrics());
|
// res.updateConfiguration(config, res.getDisplayMetrics());
|
||||||
return res;
|
// return res;
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.yunbao.common.bean;
|
package com.yunbao.common.bean;
|
||||||
|
|
||||||
|
import androidx.room.Transaction;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.Expose;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
public class WishModel extends BaseModel {
|
public class WishModel extends BaseModel {
|
||||||
@ -29,7 +32,7 @@ public class WishModel extends BaseModel {
|
|||||||
@SerializedName("price")
|
@SerializedName("price")
|
||||||
private int price;
|
private int price;
|
||||||
@SerializedName("isShow")
|
@SerializedName("isShow")
|
||||||
private int isShow = -1;
|
private transient int isShow = -1;
|
||||||
|
|
||||||
public int getIsShow() {
|
public int getIsShow() {
|
||||||
return isShow;
|
return isShow;
|
||||||
|
@ -10,6 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
import com.lxj.xpopup.XPopup;
|
import com.lxj.xpopup.XPopup;
|
||||||
import com.yunbao.common.R;
|
import com.yunbao.common.R;
|
||||||
import com.yunbao.common.adapter.LiveNewWishAdapter;
|
import com.yunbao.common.adapter.LiveNewWishAdapter;
|
||||||
@ -23,6 +24,7 @@ import com.yunbao.common.utils.ToastUtil;
|
|||||||
import com.yunbao.common.views.LiveNewWishGiftPopup;
|
import com.yunbao.common.views.LiveNewWishGiftPopup;
|
||||||
import com.yunbao.common.views.weight.ViewClicksAntiShake;
|
import com.yunbao.common.views.weight.ViewClicksAntiShake;
|
||||||
|
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -100,8 +102,17 @@ public class LiveNewWishListFragment extends BaseFragment {
|
|||||||
public void saveWish() {
|
public void saveWish() {
|
||||||
List<WishModel> wishList = liveNewWishAdapter.getWishList();
|
List<WishModel> wishList = liveNewWishAdapter.getWishList();
|
||||||
wishList.remove(wishList.size() - 1);
|
wishList.remove(wishList.size() - 1);
|
||||||
|
// 1. Gson构造器
|
||||||
|
GsonBuilder builder = new GsonBuilder();
|
||||||
|
// 2. 排除使用特定修饰符的字段
|
||||||
|
builder.excludeFieldsWithModifiers(Modifier.TRANSIENT);
|
||||||
|
// 3. 格式良好的输出
|
||||||
|
builder.setPrettyPrinting();
|
||||||
|
// 4. 创建Gson对象
|
||||||
|
Gson gson = builder.create();
|
||||||
|
|
||||||
LiveNetManager.get(getContext()).
|
LiveNetManager.get(getContext()).
|
||||||
setWishlistV2(type, new Gson().toJson(wishList), new HttpCallback<String>() {
|
setWishlistV2(type, gson.toJson(wishList), new HttpCallback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(String data) {
|
public void onSuccess(String data) {
|
||||||
ToastUtil.show(data);
|
ToastUtil.show(data);
|
||||||
|
130
common/src/main/java/com/yunbao/common/utils/AppManager.java
Normal file
130
common/src/main/java/com/yunbao/common/utils/AppManager.java
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
package com.yunbao.common.utils;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
public class AppManager {
|
||||||
|
|
||||||
|
private static Stack<Activity> activityStack;
|
||||||
|
|
||||||
|
public AppManager() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单一实例
|
||||||
|
*/
|
||||||
|
public static AppManager getInstance() {
|
||||||
|
return SingleApp.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SingleApp {
|
||||||
|
public static AppManager INSTANCE = new AppManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加Activity到堆栈
|
||||||
|
*/
|
||||||
|
public void addActivity(Activity activity) {
|
||||||
|
if (activityStack == null) {
|
||||||
|
activityStack = new Stack<Activity>();
|
||||||
|
}
|
||||||
|
activityStack.add(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除Activity
|
||||||
|
*/
|
||||||
|
public void removeActivity(Activity activity) {
|
||||||
|
activityStack.remove(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定的Activity
|
||||||
|
*/
|
||||||
|
public static Activity getActivity(Class<?> cls) {
|
||||||
|
if (activityStack != null)
|
||||||
|
for (Activity activity : activityStack) {
|
||||||
|
if (activity.getClass().equals(cls)) {
|
||||||
|
return activity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前显示Activity(堆栈中最后一个传入的activity)
|
||||||
|
*/
|
||||||
|
public Activity getLastActivity() {
|
||||||
|
Activity activity = activityStack.lastElement();
|
||||||
|
return activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有Activity
|
||||||
|
*/
|
||||||
|
public Stack<Activity> getAllActivityStacks() {
|
||||||
|
return activityStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束指定的Activity
|
||||||
|
*/
|
||||||
|
public void finishActivity(Activity activity) {
|
||||||
|
if (activity != null) {
|
||||||
|
if (!activity.isFinishing()) {
|
||||||
|
activity.finish();
|
||||||
|
activityStack.remove(activity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束指定类名的Activity
|
||||||
|
*/
|
||||||
|
public void finishActivity(Class<?> cls) {
|
||||||
|
for (Activity activity : activityStack) {
|
||||||
|
if (activity.getClass().equals(cls)) {
|
||||||
|
finishActivity(activity);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束除当前传入以外所有Activity
|
||||||
|
*/
|
||||||
|
public void finishOthersActivity(Class<?> cls) {
|
||||||
|
if (activityStack != null)
|
||||||
|
for (Activity activity : activityStack) {
|
||||||
|
if (!activity.getClass().equals(cls)) {
|
||||||
|
activity.finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束所有Activity
|
||||||
|
*/
|
||||||
|
public void finishAllActivity() {
|
||||||
|
if (activityStack != null)
|
||||||
|
for (Activity activity : activityStack) {
|
||||||
|
activity.finish();
|
||||||
|
}
|
||||||
|
activityStack.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退出应用程序
|
||||||
|
*/
|
||||||
|
public void AppExit() {
|
||||||
|
try {
|
||||||
|
finishAllActivity();
|
||||||
|
android.os.Process.killProcess(android.os.Process.myPid());// 杀死该应用进程
|
||||||
|
System.exit(0);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,6 +14,7 @@ import androidx.viewpager2.widget.ViewPager2;
|
|||||||
|
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
import com.lxj.xpopup.XPopup;
|
import com.lxj.xpopup.XPopup;
|
||||||
import com.lxj.xpopup.core.BottomPopupView;
|
import com.lxj.xpopup.core.BottomPopupView;
|
||||||
import com.yunbao.common.R;
|
import com.yunbao.common.R;
|
||||||
@ -33,6 +34,7 @@ import com.yunbao.common.views.weight.ViewClicksAntiShake;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
|
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -286,8 +288,16 @@ public class LiveNewWishListPopup extends BottomPopupView {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
List<WishModel> wishList = new ArrayList<>();
|
List<WishModel> wishList = new ArrayList<>();
|
||||||
|
// 1. Gson构造器
|
||||||
|
GsonBuilder builder = new GsonBuilder();
|
||||||
|
// 2. 排除使用特定修饰符的字段
|
||||||
|
builder.excludeFieldsWithModifiers(Modifier.TRANSIENT);
|
||||||
|
// 3. 格式良好的输出
|
||||||
|
builder.setPrettyPrinting();
|
||||||
|
// 4. 创建Gson对象
|
||||||
|
Gson gson = builder.create();
|
||||||
LiveNetManager.get(getContext()).
|
LiveNetManager.get(getContext()).
|
||||||
setWishlistV2(type, new Gson().toJson(wishList), new HttpCallback<String>() {
|
setWishlistV2(type, gson.toJson(wishList), new HttpCallback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(String data) {
|
public void onSuccess(String data) {
|
||||||
ToastUtil.show(data);
|
ToastUtil.show(data);
|
||||||
|
@ -1116,4 +1116,6 @@ Limited ride And limited avatar frame</string>
|
|||||||
<string name="live_use_discount_yes">Use</string>
|
<string name="live_use_discount_yes">Use</string>
|
||||||
<string name="live_use_wish">wish</string>
|
<string name="live_use_wish">wish</string>
|
||||||
<string name="live_play_setting">Play setting</string>
|
<string name="live_play_setting">Play setting</string>
|
||||||
|
<string name="live_language_setting">language setting</string>
|
||||||
|
<string name="traditional_chinese">Traditional Chinese</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1114,5 +1114,7 @@
|
|||||||
<string name="live_use_discount_yes">使用</string>
|
<string name="live_use_discount_yes">使用</string>
|
||||||
<string name="live_use_wish">心願</string>
|
<string name="live_use_wish">心願</string>
|
||||||
<string name="live_play_setting">播放設置</string>
|
<string name="live_play_setting">播放設置</string>
|
||||||
|
<string name="live_language_setting">語言設定</string>
|
||||||
|
<string name="traditional_chinese">繁體中文</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -60,6 +60,10 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".activity.SettingActivity"
|
android:name=".activity.SettingActivity"
|
||||||
android:screenOrientation="portrait" />
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name=".activity.LanguageSettingActivity"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
|
android:configChanges="locale|layoutDirection|keyboard" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.SearchActivity"
|
android:name=".activity.SearchActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.yunbao.main.activity;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import com.yunbao.common.activity.AbsActivity;
|
||||||
|
import com.yunbao.common.utils.AppManager;
|
||||||
|
import com.yunbao.common.views.weight.ViewClicksAntiShake;
|
||||||
|
import com.yunbao.main.R;
|
||||||
|
import com.yunbao.main.utils.LanguageUtil;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
public class LanguageSettingActivity extends AbsActivity {
|
||||||
|
private LinearLayout traditionalChinese, english;
|
||||||
|
private ImageView imgTraditionalChinese, imgEnglish;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLayoutId() {
|
||||||
|
return R.layout.activity_language_sett;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void main() {
|
||||||
|
super.main();
|
||||||
|
traditionalChinese = findViewById(R.id.traditional_chinese);
|
||||||
|
english = findViewById(R.id.english);
|
||||||
|
imgEnglish = findViewById(R.id.img_english);
|
||||||
|
imgTraditionalChinese = findViewById(R.id.img_traditional_chinese);
|
||||||
|
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.live_photo_btn_cancel), () -> onBackPressed());
|
||||||
|
ViewClicksAntiShake.clicksAntiShake(traditionalChinese, new ViewClicksAntiShake.ViewClicksCallBack() {
|
||||||
|
@Override
|
||||||
|
public void onViewClicks() {
|
||||||
|
changeAllActivitysLanguage(Locale.SIMPLIFIED_CHINESE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ViewClicksAntiShake.clicksAntiShake(english, new ViewClicksAntiShake.ViewClicksCallBack() {
|
||||||
|
@Override
|
||||||
|
public void onViewClicks() {
|
||||||
|
changeAllActivitysLanguage(Locale.US);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void changeAllActivitysLanguage(Locale locale) {
|
||||||
|
Stack<Activity> allActivityStacks = AppManager.getInstance().getAllActivityStacks();
|
||||||
|
for (int i = 0; i < allActivityStacks.size(); i++) {
|
||||||
|
LanguageUtil.shiftLanguage(locale, allActivityStacks.get(i),mContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -144,6 +144,13 @@ public class SettingActivity extends AbsActivity implements OnItemClickListener<
|
|||||||
startActivity(new Intent(SettingActivity.this, MsgSettActivity.class));
|
startActivity(new Intent(SettingActivity.this, MsgSettActivity.class));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
//语言设置
|
||||||
|
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.language_setting), new ViewClicksAntiShake.ViewClicksCallBack() {
|
||||||
|
@Override
|
||||||
|
public void onViewClicks() {
|
||||||
|
startActivity(new Intent(SettingActivity.this, LanguageSettingActivity.class));
|
||||||
|
}
|
||||||
|
});
|
||||||
//屏蔽礼物特效
|
//屏蔽礼物特效
|
||||||
ViewClicksAntiShake.clicksAntiShake(studioGiftEffects, new ViewClicksAntiShake.ViewClicksCallBack() {
|
ViewClicksAntiShake.clicksAntiShake(studioGiftEffects, new ViewClicksAntiShake.ViewClicksCallBack() {
|
||||||
@Override
|
@Override
|
||||||
|
95
main/src/main/java/com/yunbao/main/utils/LanguageUtil.java
Normal file
95
main/src/main/java/com/yunbao/main/utils/LanguageUtil.java
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package com.yunbao.main.utils;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.backup.BackupManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
|
|
||||||
|
import com.yunbao.main.activity.MainActivity;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class LanguageUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 这个方法虽然更新了资源但是只能以后的界面生效,之前没有finish的页面还是保留原来的语言
|
||||||
|
*
|
||||||
|
* @param locale
|
||||||
|
* @param context
|
||||||
|
*/
|
||||||
|
public static void shiftLanguage(Locale locale, Context context) {
|
||||||
|
Resources resources = context.getResources();
|
||||||
|
Configuration config = resources.getConfiguration();
|
||||||
|
DisplayMetrics dm = resources.getDisplayMetrics();
|
||||||
|
config.locale = locale;
|
||||||
|
resources.updateConfiguration(config, dm);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 这个方法是为了让全部的activity都修改语言
|
||||||
|
*
|
||||||
|
* @param locale
|
||||||
|
* @param activity
|
||||||
|
* @param context
|
||||||
|
*/
|
||||||
|
public static void shiftLanguage(Locale locale, Activity activity, Context context) {
|
||||||
|
Resources resources = context.getResources();
|
||||||
|
Configuration config = resources.getConfiguration();
|
||||||
|
DisplayMetrics dm = resources.getDisplayMetrics();
|
||||||
|
config.locale = locale;
|
||||||
|
resources.updateConfiguration(config, dm);
|
||||||
|
if (!(activity instanceof MainActivity)) {
|
||||||
|
activity.recreate();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void updateLanguage(Locale locale) {
|
||||||
|
try {
|
||||||
|
Object objIActMag, objActMagNative;
|
||||||
|
Class clzIActMag = Class.forName("android.app.IActivityManager");
|
||||||
|
|
||||||
|
Class clzActMagNative = Class
|
||||||
|
.forName("android.app.ActivityManagerNative");
|
||||||
|
//amn = ActivityManagerNative.getDefault();
|
||||||
|
Method mtdActMagNative$getDefault = clzActMagNative
|
||||||
|
.getDeclaredMethod("getDefault");
|
||||||
|
objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
|
||||||
|
// objIActMag = amn.getConfiguration();
|
||||||
|
Method mtdIActMag$getConfiguration = clzIActMag
|
||||||
|
.getDeclaredMethod("getConfiguration");
|
||||||
|
Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);
|
||||||
|
// set the locale to the new value
|
||||||
|
config.locale = locale;
|
||||||
|
|
||||||
|
//持久化 config.userSetLocale = true;
|
||||||
|
Class clzConfig = Class
|
||||||
|
.forName("android.content.res.Configuration");
|
||||||
|
java.lang.reflect.Field userSetLocale = clzConfig
|
||||||
|
.getField("userSetLocale");
|
||||||
|
userSetLocale.set(config, true);
|
||||||
|
|
||||||
|
//如果有阿拉伯语,必须加上,否则阿拉伯语与其它语言切换时,布局与文字方向不会改变
|
||||||
|
Method setLayoutDirection = clzConfig
|
||||||
|
.getDeclaredMethod("setLayoutDirection", Locale.class);
|
||||||
|
setLayoutDirection.invoke(config, locale);
|
||||||
|
|
||||||
|
// 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
|
||||||
|
// 会重新调用 onCreate();
|
||||||
|
Class[] clzParams = {Configuration.class};
|
||||||
|
// objIActMag.updateConfiguration(config);
|
||||||
|
Method mtdIActMag$updateConfiguration = clzIActMag
|
||||||
|
.getDeclaredMethod("updateConfiguration", clzParams);
|
||||||
|
|
||||||
|
mtdIActMag$updateConfiguration.invoke(objIActMag, config);
|
||||||
|
BackupManager.dataChanged("com.android.providers.settings");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
main/src/main/res/drawable/background_language.xml
Normal file
9
main/src/main/res/drawable/background_language.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<corners android:radius="12dp" />
|
||||||
|
<solid android:color="#FFC821" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</selector>
|
BIN
main/src/main/res/drawable/icon_xuanzhong.png
Normal file
BIN
main/src/main/res/drawable/icon_xuanzhong.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
107
main/src/main/res/layout/activity_language_sett.xml
Normal file
107
main/src/main/res/layout/activity_language_sett.xml
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="24dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/live_photo_btn_cancel"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="14dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:padding="2dp"
|
||||||
|
android:text="@string/live_photo_btn_cancel"
|
||||||
|
android:textColor="#666666"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="11dp"
|
||||||
|
android:text="@string/live_language_setting"
|
||||||
|
android:textColor="#333333"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:background="@drawable/background_language"
|
||||||
|
android:paddingStart="10dp"
|
||||||
|
android:paddingTop="4dp"
|
||||||
|
android:paddingEnd="10dp"
|
||||||
|
android:paddingBottom="4dp"
|
||||||
|
android:text="@string/complete"
|
||||||
|
android:textColor="@color/white" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0.5dp"
|
||||||
|
android:background="#E9EDF0" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/traditional_chinese"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingStart="16dp"
|
||||||
|
android:text="@string/traditional_chinese"
|
||||||
|
android:textColor="#333333" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/img_traditional_chinese"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:background="@drawable/icon_xuanzhong" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0.5dp"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:background="#E9EDF0" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/english"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingStart="16dp"
|
||||||
|
android:text="English"
|
||||||
|
android:textColor="#333333" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/img_english"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:background="@drawable/icon_xuanzhong" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
@ -155,6 +155,37 @@
|
|||||||
android:src="@mipmap/icon_arrow_right" />
|
android:src="@mipmap/icon_arrow_right" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/language_setting"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:paddingTop="15dp"
|
||||||
|
android:paddingBottom="25dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="25dp"
|
||||||
|
android:text="@string/live_language_setting"
|
||||||
|
android:textColor="#1E1F20"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="17dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_marginEnd="26.33dp"
|
||||||
|
android:src="@mipmap/icon_arrow_right" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
Loading…
Reference in New Issue
Block a user