关注 安卓007 ,免费获取全套安卓开发学习资料
效果图
![67d7ada599afab48dcbcf6c8708eb78c.png](https://img-blog.csdnimg.cn/img_convert/67d7ada599afab48dcbcf6c8708eb78c.png)
image
解决方案
- 关键代码
对RelativeLayout增加一个函数扩展
/** * 针对RelativeLayout,显示或隐藏一个遮罩层 * 注意点:不能在onCreate、onViewCreated等界面初始化函数中调用,必须在页面初始化后调用。 * 因为涉及到设置遮罩层的宽度和高度,如果界面未初始化完成,其宽和高都没有固定。 * shouldShow:是否显示遮罩层 * maskColor:遮罩层颜色 */fun RelativeLayout.showMaskLayer(shouldShow: Boolean = true, maskColor: String = "#807F7F7F") { val maskViewTag = "MASK_VIEW_TAG" var maskView = findViewWithTag(maskViewTag) if (shouldShow) { if (maskView == null) { maskView = View(context) maskView.tag = maskViewTag //设置遮罩层颜色 maskView.setBackgroundColor(Color.parseColor(maskColor)) //屏蔽点击事件 maskView.setOnClickListener { } addView(maskView, width, height) } } else { maskView?.let { removeView(it) } }}
- 使用样例
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) showBtn.setOnClickListener { relativeLayout.showMaskLayer(true) } hideBtn.setOnClickListener { relativeLayout.showMaskLayer(false) } }}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
完整源代码
https://gitee.com/cxyzy1/maskLayer