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.LayoutInflater; 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.NonNull; 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.BaseFragment; 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.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.GrowthExperienceActivity; 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.PetDetailActivity; 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.hjq.bar.TitleBar; import java.util.HashMap; import java.util.Map; import io.reactivex.functions.Consumer; /** * @author Ljj * @date 2023.05.08. 21:49 * @desc 该APP里统一侧拉栏的 Fragment 基类 */ public abstract class DLBaseFragment extends BaseFragment { /** * 侧拉栏 */ private DrawerLayout mDrawerLayout; private Map classMap = new HashMap<>(); @Override protected VDB initViewBinding(LayoutInflater inflater, @Nullable ViewGroup container) { if (isDrawerLayoutEnabled()){ mDrawerLayout = new DrawerLayout(getSelfActivity()); mDrawerLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); VDB mBinding = DataBindingUtil.inflate(inflater, getLayoutId(), mDrawerLayout, true); if (getDrawerLayoutId() > 0){ inflater.inflate(getDrawerLayoutId(), mDrawerLayout, true); }else { throw new IllegalArgumentException("没给侧拉栏布局就不要开启侧拉栏啦"); } return mBinding; } return super.initViewBinding(inflater, container); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { isLoaded = false; if (getLayoutId() > 0){ binding = initViewBinding(inflater, container); if (isDrawerLayoutEnabled()) { //如果开启了侧拉栏,就把布局放到侧拉栏里面 mRootView = mDrawerLayout; }else { mRootView = binding.getRoot(); } return mRootView; } return null; } /** * 是否开启侧拉栏 */ protected boolean isDrawerLayoutEnabled() { return true; } /** * 获取侧拉栏的id * @return layout的id */ protected int getDrawerLayoutId(){ return R.layout.layout_drawer; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, 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(PetDetailActivity.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(getContext(), TreeFragment.class); }else{ 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()); } } }); } 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(); getContext().getTheme().resolveAttribute(R.attr.drawerTextColor, textColor, true); textView.setTextColor(textColor.data); TypedValue icon = new TypedValue(); getContext().getTheme().resolveAttribute(R.attr.drawerSelectIcon, icon, true); imageView.setBackgroundResource(icon.resourceId); } 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); } } /** * 获取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(getSelfActivity()); // 设置布局文件 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; } }