PopupWindow弹出菜单

先看一下效果图:
在这里插入图片描述
首先添加工具类 MenuDetailPopup.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow;

import com.drakeet.multitype.MultiTypeAdapter;
import com.yikelive.R;
import com.yikelive.binder.DiaLogDetailPopupBinder;

import org.jetbrains.annotations.NotNull;

import java.util.List;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MenuDetailPopup extends PopupWindow {
    private final RecyclerView rvPopup;
    private MultiTypeAdapter adapter;
    private Context mContext;
    private ClickListener mClickListener;
    private List<String> menus;

    public interface ClickListener {
        void topClick(String position);
    }

    public void setOnTopListener(ClickListener click) {
        mClickListener = click;
    }

    public MenuDetailPopup(Context context, List<String> menus) {
        super(context);
        mContext = context;
        this.menus = menus;
        //透明背景
        // setBackgroundDrawable(mContext.getDrawable(R.drawable.detail_pop_bg));
        setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        setOutsideTouchable(true);
        setFocusable(true);
        View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_detail_popup,
                null, false);
        setContentView(contentView);
        rvPopup = contentView.findViewById(R.id.rv_popup);
        //业务相关
        setAdapter();
    }

    private void setAdapter() {
        rvPopup.setLayoutManager(new LinearLayoutManager(mContext));
        adapter = new MultiTypeAdapter(menus);
        adapter.register(String.class, new DiaLogDetailPopupBinder() {
            @Override
            public void onMenuOnclick(@NotNull String item) {
                if (mClickListener != null) {
                    mClickListener.topClick(item);
                }
            }
        });
        rvPopup.setAdapter(adapter);
    }
}

在activity中用法:

//此处为添加要显示的文字
 val renewalRecord = resources.getString(R.string.title_activity_vip_renewal_record)
 val redeemVip = resources.getString(R.string.title_activity_vip_redeem)
 //文字添加进集合
 val list = arrayListOf(
      renewalRecord,
      redeemVip
 )
 //初始化弹出框工具类
 val pupup = MenuDetailPopup(requireContext(), list)
 //设置其加载位置:(在指定的View弹出。x轴,y轴)
 pupup.showAsDropDown(binding.includeTitle.iv_menu, 0, 10)
 pupup.setOnTopListener {
       if (it == renewalRecord) {
           //交易记录
           ARouter.getInstance()
           .build(ARouterContract.VIP.renewalRecord)
            .navigation()
       } else if (it == redeemVip) {
            //兑换会员
            ARouter.getInstance()
           .build(ARouterContract.VIP.redeem)
           .navigation()
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值