Android如何优雅地使用popup,在点击位置弹出,个人记录

该代码段展示了在Android中如何初始化一个PopupWindow,设置其布局、参数和点击事件监听器。通过绑定不同的点击事件,更新UI并关闭弹窗。同时,弹窗的显示位置和动画效果也进行了配置。
摘要由CSDN通过智能技术生成

第一步,定义初始化弹窗方法,设定一些参数,然后绑定ui布局


    lateinit var duishoujiaTypePop: PopupWindow
    lateinit var duishoujiaTypeInflate: View
    lateinit var tv_duishoujia_type_duishoujia: TextView
    lateinit var tv_duishoujia_type_zuiyouwudang: TextView
    lateinit var tv_duishoujia_type_zuiyoushidang: TextView
    lateinit var tv_duishoujia_type_zuiyouershidang: TextView

    private fun initDuishoujiaType() {
        //填充对话框的布局
        duishoujiaTypeInflate = layoutInflater.inflate(
                R.layout.dialog_yongxu_duishoujia_type, LinearLayout(context),
                false
        )
//        val height = getUnknownDpSize(context!!, 300)// 屏幕的高
//        val width = ll_weituo_type.measuredWidth
        duishoujiaTypePop = PopupWindow(
                duishoujiaTypeInflate,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        )
        //设置
        duishoujiaTypePop!!.setClippingEnabled(false)
        // 设置动画效果
        duishoujiaTypePop!!.animationStyle = R.style.ActionSheetDialogAnimation
        //设置点击外部
        duishoujiaTypePop!!.setOutsideTouchable(true)
        //点击外部控件时不执行外部事件,拦截返回键
        duishoujiaTypePop!!.isFocusable = true
        duishoujiaTypePop!!.setBackgroundDrawable(BitmapDrawable())
        //设置其他位置取消阴影
        duishoujiaTypePop!!.setOnDismissListener {
            backgroundAlpha(1.0F)
        }
        tv_duishoujia_type_duishoujia = duishoujiaTypeInflate!!.findViewById(R.id.tv_duishoujia_type_duishoujia)
        tv_duishoujia_type_duishoujia.setOnClickListener {
            duishoujiaType = "1"
            tv_duishoujia_value.text = getString(R.string.competitors_price)
            duishoujiaTypePop.dismiss()
        }
        tv_duishoujia_type_zuiyouwudang = duishoujiaTypeInflate!!.findViewById(R.id.tv_duishoujia_type_zuiyouwudang)
        tv_duishoujia_type_zuiyouwudang.setOnClickListener {
            duishoujiaType = "5"
            tv_duishoujia_value.text = getString(R.string.optimal_five_gears)
            duishoujiaTypePop.dismiss()
        }
        tv_duishoujia_type_zuiyoushidang = duishoujiaTypeInflate!!.findViewById(R.id.tv_duishoujia_type_zuiyoushidang)
        tv_duishoujia_type_zuiyoushidang.setOnClickListener {
            duishoujiaType = "10"
            tv_duishoujia_value.text = getString(R.string.optimal_ten_gears)
            duishoujiaTypePop.dismiss()
        }
        tv_duishoujia_type_zuiyouershidang = duishoujiaTypeInflate!!.findViewById(R.id.tv_duishoujia_type_zuiyouershidang)
        tv_duishoujia_type_zuiyouershidang.setOnClickListener {
            duishoujiaType = "20"
            tv_duishoujia_value.text = getString(R.string.optimal_two_gears)
            duishoujiaTypePop.dismiss()
        }
    }

第二步,在打开弹窗前先调用第一步声明的初始化方法,可以在onCreate中调用,然后添加组件点击事件打开弹窗,代码解释已经写在注释里,很详细自己看就能看懂,里面的布局自己删了重写就ok,不用非得照搬我的布局,所以我这里也不放布局了。


        initDuishoujiaType()

        ll_duishoujia_value.setOnClickListener {
            //这里传入的布局是点击的组件,也就是在什么位置显示
            duishoujiaTypePop!!.showAsDropDown(
                    view!!.findViewById(R.id.ll_duishoujia_value)
            )
            //设置弹窗背景阴影
            backgroundAlpha(0.7f)
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值