第一步,定义初始化弹窗方法,设定一些参数,然后绑定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)
}