package com.application.zhangshi_app_android.ui; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; import androidx.drawerlayout.widget.DrawerLayout; import com.android.app_base.base.BaseConfig; import com.android.app_base.base.view.BaseActivity; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.manager.AppManager; import com.android.app_base.manager.UserManager; import com.android.app_base.utils.GlideUtil; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.rxbus.MessageEvent; import com.android.app_base.utils.rxbus.RxBus; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.ui.function.AnnualHealthStatusActivity; import com.application.zhangshi_app_android.ui.function.CertificateOfHonorActivity; import com.application.zhangshi_app_android.ui.function.CleanStorageActivity; import com.application.zhangshi_app_android.ui.function.ContactsActivity; import com.application.zhangshi_app_android.ui.function.FamilyAssetsActivity; import com.application.zhangshi_app_android.ui.function.FamilyMemorabiliaActivity; import com.application.zhangshi_app_android.ui.function.HomeDevicesActivity; import com.application.zhangshi_app_android.ui.function.HonorCollectionActivity; import com.application.zhangshi_app_android.ui.function.HundredWishActivity; import com.application.zhangshi_app_android.ui.function.IncomeAndExpensesActivity; import com.application.zhangshi_app_android.ui.function.LittleDoctorActivity; import com.application.zhangshi_app_android.ui.function.MarriageActivity; import com.application.zhangshi_app_android.ui.function.MeetingActivity; import com.application.zhangshi_app_android.ui.function.PersonalNotepadActivity; import com.application.zhangshi_app_android.ui.function.PetActivity; import com.application.zhangshi_app_android.ui.function.PrivacyActivity; import com.application.zhangshi_app_android.ui.function.PropertyActivity; import com.application.zhangshi_app_android.ui.function.TourismActivity; import com.application.zhangshi_app_android.ui.home.TreeFragment; import com.application.zhangshi_app_android.ui.main.MainActivity; import com.github.gzuliyujiang.wheelpicker.DatePicker; import com.github.gzuliyujiang.wheelpicker.OptionPicker; import com.github.gzuliyujiang.wheelpicker.TimePicker; import com.github.gzuliyujiang.wheelpicker.entity.DateEntity; import com.github.gzuliyujiang.wheelpicker.impl.UnitDateFormatter; import com.github.gzuliyujiang.wheelpicker.impl.UnitTimeFormatter; import com.github.gzuliyujiang.wheelpicker.widget.DateWheelLayout; import com.github.gzuliyujiang.wheelpicker.widget.OptionWheelLayout; import com.github.gzuliyujiang.wheelpicker.widget.TimeWheelLayout; import com.hjq.bar.TitleBar; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import io.reactivex.functions.Consumer; /** * @author Ljj * @date 2023.04.01. 18:21 * @desc 该APP里统一侧拉栏的Activity基类 */ public abstract class DLBaseActivity extends BaseActivity { /** * 侧拉栏 */ private DrawerLayout mDrawerLayout; private Map classMap = new HashMap<>(); @Override protected VDB initViewBinding() { if (isDrawerLayoutEnabled()){ mDrawerLayout = new DrawerLayout(this); mDrawerLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); VDB mBinding = DataBindingUtil.inflate(getLayoutInflater(), getLayoutId(), mDrawerLayout, true); if (getDrawerLayoutId() > 0){ getLayoutInflater().inflate(getDrawerLayoutId(), mDrawerLayout, true); }else { throw new IllegalArgumentException("没给侧拉栏布局就不要开启侧拉栏啦"); } setContentView(mDrawerLayout); return mBinding; } return super.initViewBinding(); } /** * 是否开启侧拉栏 */ protected boolean isDrawerLayoutEnabled() { return true; } /** * 获取侧拉栏的id * @return layout的id */ protected int getDrawerLayoutId(){ return R.layout.layout_drawer; }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { //设置主题 if (UserManager.getInstance().getNightModeState()) { setTheme(R.style.AppTheme_Night); } else { setTheme(R.style.AppTheme_Normal); } super.onCreate(savedInstanceState); if (mDrawerLayout != null) { classMap.put(TreeFragment.class,(LinearLayout) findViewById(R.id.dl_home_root_net)); classMap.put(FamilyMemorabiliaActivity.class,(LinearLayout) findViewById(R.id.dl_family_memorabilia)); classMap.put(MeetingActivity.class,(LinearLayout) findViewById(R.id.dl_family_meeting)); classMap.put(FamilyAssetsActivity.class,(LinearLayout) findViewById(R.id.dl_family_assets)); classMap.put(HomeDevicesActivity.class,(LinearLayout) findViewById(R.id.dl_home_devices)); classMap.put(HonorCollectionActivity.class,(LinearLayout) findViewById(R.id.dl_honor_collection)); classMap.put(LittleDoctorActivity.class,(LinearLayout) findViewById(R.id.dl_little_doctor)); classMap.put(CleanStorageActivity.class,(LinearLayout) findViewById(R.id.dl_clean_storage)); classMap.put(ContactsActivity.class,(LinearLayout) findViewById(R.id.dl_contacts)); classMap.put(PetActivity.class,(LinearLayout) findViewById(R.id.dl_pet)); classMap.put(IncomeAndExpensesActivity.class,(LinearLayout) findViewById(R.id.dl_income_and_expenses)); classMap.put(PersonalNotepadActivity.class,(LinearLayout) findViewById(R.id.dl_growing_up)); classMap.put(MarriageActivity.class,(LinearLayout) findViewById(R.id.dl_marriage)); classMap.put(PropertyActivity.class,(LinearLayout) findViewById(R.id.dl_property)); classMap.put(HundredWishActivity.class,(LinearLayout) findViewById(R.id.dl_hundred_wish)); classMap.put(AnnualHealthStatusActivity.class,(LinearLayout) findViewById(R.id.dl_health_care)); classMap.put(CertificateOfHonorActivity.class,(LinearLayout) findViewById(R.id.dl_certificate_of_honor)); classMap.put(PrivacyActivity.class,(LinearLayout) findViewById(R.id.dl_privacy)); classMap.put(TourismActivity.class,(LinearLayout) findViewById(R.id.dl_tourism)); setSelectItem(classMap.get(getClass())); for (Map.Entry set : classMap.entrySet()) { LinearLayout linearLayout = set.getValue(); if (linearLayout != null) { linearLayout.setOnClickListener(v -> { if (set.getKey() != null){ if (set.getKey() == TreeFragment.class) { MainActivity.start(this, TreeFragment.class); }else{ if(this.getClass() != set.getKey()){ AppManager.getAppManager().startActivity(set.getKey()); } } mDrawerLayout.close(); } }); } else { } } mDrawerLayout.setScrimColor(getResources().getColor(R.color.color_shadow)); } setNameAndAvatar(UserManager.getInstance().getUserName(),UserManager.getInstance().getUserAvatar()); RxBus.getInstance().toObservable(this, MessageEvent.class).subscribe(new Consumer() { @Override public void accept(MessageEvent event) throws Exception { if(event.getMessageEventCode() == MessageEvent.EVENT_UPDATE_USER_INFO){ setNameAndAvatar(UserManager.getInstance().getUserName(),UserManager.getInstance().getUserAvatar()); } } }); } public void setNameAndAvatar(String name,String avatar){ if (mDrawerLayout != null){ if (avatar.contains("profile/upload")) {//如果是上传到服务器的图片 //只取profile/upload以后的部分 avatar = avatar.substring(avatar.indexOf("profile/upload")); avatar = BaseConfig.BASE_URL_DOMAIN + "/" + avatar; } GlideUtil.loadImage(avatar, findViewById(R.id.dl_home_user_avatar)); TextView userNameTv = findViewById(R.id.dl_home_user_name); userNameTv.setText(name); } } private void setSelectItem(LinearLayout linearLayout) { if (linearLayout == null){ return; } TextView textView = (TextView) linearLayout.getChildAt(1); ImageView imageView = (ImageView) linearLayout.getChildAt(2); TypedValue textColor = new TypedValue(); getTheme().resolveAttribute(R.attr.drawerTextColor, textColor, true); textView.setTextColor(textColor.data); TypedValue icon = new TypedValue(); getTheme().resolveAttribute(R.attr.drawerSelectIcon, icon, true); imageView.setBackgroundResource(icon.resourceId); } /** * 获取DrawerLayout */ @Nullable public DrawerLayout getDrawerLayout() { return mDrawerLayout; } @Override public void onLeftClick(TitleBar titleBar) { super.onLeftClick(titleBar); mDrawerLayout.open(); } public PopupWindow initPopUpWindow(View view){ PopupWindow popupWindow = new PopupWindow(this); // 设置布局文件 popupWindow.setContentView(view); // 为了避免部分机型不显示,需要重新设置一下宽高 popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); // 设置pop透明效果 popupWindow.setBackgroundDrawable(new ColorDrawable(0x0000)); // 设置pop出入动画 popupWindow.setAnimationStyle(com.android.app_base.R.style.pop_operate); // 设置pop获取焦点,如果为false点击返回按钮会退出当前Activity,如果pop中有Editor的话,focusable必须要为true popupWindow.setFocusable(true); // 设置pop可点击,为false点击事件无效,默认为true popupWindow.setTouchable(true); // 设置点击pop外侧消失,默认为false;在focusable为true时点击外侧始终消失 popupWindow.setOutsideTouchable(false); return popupWindow; } public DatePicker getDatePicker(){ DatePicker datePicker = new DatePicker(this); DateWheelLayout wheelLayout = datePicker.getWheelLayout(); wheelLayout.getMonthWheelView().setCurtainCorner(0);//背景无圆角 wheelLayout.getDayWheelView().setCurtainCorner(5);//背景右边有圆角 wheelLayout.getYearWheelView().setCurtainCorner(4);//背景左边有圆角 wheelLayout.setDateFormatter(new UnitDateFormatter()); wheelLayout.setPadding(50, 0, 50, 0); wheelLayout.setItemSpace(ScreenSizeUtils.dip2px(getSelfActivity(), 20)); wheelLayout.setCurtainEnabled(true); wheelLayout.setCurtainColor(Color.parseColor("#4D2F63F8")); wheelLayout.setCurtainRadius(ScreenSizeUtils.dip2px(getSelfActivity(),4)); wheelLayout.setSelectedTextColor(Color.parseColor("#FF2F63F8")); wheelLayout.setTextColor(Color.parseColor("#FF999999")); wheelLayout.setIndicatorEnabled(false); //日期可选范围 wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.target(2500, 12, 31),DateEntity.target(Calendar.getInstance())); datePicker.getWheelLayout().setResetWhenLinkage(false); return datePicker; } public TimePicker getTimePicker(){ TimePicker timePicker = new TimePicker(this); TimeWheelLayout wheelLayout = timePicker.getWheelLayout(); wheelLayout.getHourWheelView().setCurtainCorner(0);//背景无圆角 wheelLayout.getMinuteWheelView().setCurtainCorner(5);//背景右边有圆角 wheelLayout.getSecondWheelView().setCurtainCorner(4);//背景左边有圆角 wheelLayout.setTimeFormatter(new UnitTimeFormatter()); wheelLayout.setPadding(50, 0, 50, 0); wheelLayout.setItemSpace(ScreenSizeUtils.dip2px(getSelfActivity(), 20)); wheelLayout.setCurtainEnabled(true); wheelLayout.setCurtainColor(Color.parseColor("#4D2F63F8")); wheelLayout.setCurtainRadius(ScreenSizeUtils.dip2px(getSelfActivity(),4)); wheelLayout.setSelectedTextColor(Color.parseColor("#FF2F63F8")); wheelLayout.setTextColor(Color.parseColor("#FF999999")); wheelLayout.setIndicatorEnabled(false); //日期可选范围 // wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.target(2500, 12, 31),DateEntity.target(Calendar.getInstance())); timePicker.getWheelLayout().setResetWhenLinkage(false); return timePicker; } public OptionPicker getOptionPicker(List list){ OptionPicker picker = new OptionPicker(this); OptionWheelLayout wheelLayout = picker.getWheelLayout(); wheelLayout.setCurtainCorner(1);//背景无圆角 wheelLayout.setPadding(50, 0, 50, 0); wheelLayout.setItemSpace(ScreenSizeUtils.dip2px(getSelfActivity(), 20)); wheelLayout.setCurtainEnabled(true); wheelLayout.setCurtainColor(Color.parseColor("#4D2F63F8")); wheelLayout.setCurtainRadius(ScreenSizeUtils.dip2px(getSelfActivity(),4)); wheelLayout.setSelectedTextColor(Color.parseColor("#FF2F63F8")); wheelLayout.setTextColor(Color.parseColor("#FF999999")); wheelLayout.setIndicatorEnabled(false); picker.setData(list); return picker; } }