Android:Z-Order,具有屏幕宽的clickblocker视图
编辑:已解决。当我将所有自定义视图替换为“视图”按钮时,问题消失了 我试图以编程方式创建一个屏幕大小的不可见视图,它应该捕获所有单击事件,从而阻止所有底层元素。但我有点麻烦 预期目标是,当用户单击某个按钮时,将创建一个菜单。当此菜单打开时,页面上的其他按钮应不再起作用。点击菜单会让事情发生,点击其他地方会让菜单消失,让其他元素再次工作 我已经成功地创建了屏幕范围的视图,每当用户单击按钮尚未覆盖的点时,它都会捕获单击并破坏菜单。但是,当用户确实单击包含按钮的点时,只处理按钮的onclick事件,而不处理我的clickblocker事件。应该是相反的。 这让我认为这是一个z顺序问题(但不是100%确定)。 不幸的是,我试图将目标锁定在不支持view.setZ()的旧版本上,而view.bringToFront()似乎并没有达到我想要的效果 以下是viewblocker的代码:Android:Z-Order,具有屏幕宽的clickblocker视图,android,view,click,z-order,Android,View,Click,Z Order,编辑:已解决。当我将所有自定义视图替换为“视图”按钮时,问题消失了 我试图以编程方式创建一个屏幕大小的不可见视图,它应该捕获所有单击事件,从而阻止所有底层元素。但我有点麻烦 预期目标是,当用户单击某个按钮时,将创建一个菜单。当此菜单打开时,页面上的其他按钮应不再起作用。点击菜单会让事情发生,点击其他地方会让菜单消失,让其他元素再次工作 我已经成功地创建了屏幕范围的视图,每当用户单击按钮尚未覆盖的点时,它都会捕获单击并破坏菜单。但是,当用户确实单击包含按钮的点时,只处理按钮的onclick事件,而
public class ClickBlockerView extends View{
public ClickBlockerView(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(C.GetWindowWidth(getContext()), C.GetWindowHeight(getContext()));
}
public static ClickBlockerView CreateClickBlocker(Context context){
ClickBlockerView c = new ClickBlockerView(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
c.setLayoutParams(params);
c.setId(R.id.clickBlocker);
c.setClickable(true);
return c;
}
}
我是这样称呼它的(从另一个角度):
有人知道如何解决这个问题吗?这个问题的其他解决方案也受到欢迎。不过我不想使用xml(它必须添加到每个活动中)
更新:
显然,z排序可以与微调器和复选框一起使用,但与按钮和我的自定义视图不同。奇怪的
更新2:
绘制时,将显示形状以正确填充屏幕,但它也会绘制在其他自定义视图的下方,即使它是稍后创建并放在前面的。
奇怪的是,尽管我没有修改这个clickblocker的代码,但同时click功能已经完全停止了
private void createMenuAndClickblocker(){
ClickBlockerView clickblocker = ClickBlockerView.CreateClickBlocker(getContext());
clickblocker.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
destroyMenu();
}
});
((RelativeLayout) this.getParent()).addView(clickblocker);
clickblocker.bringToFront();
createMenu();
requestLayout();
}