android View with View.GONE still receives onTouch and onClick

后端 未结 9 2123
温柔的废话
温柔的废话 2020-12-13 03:40

This is confusing me:

As far as I have read, a view with setVisibility(View.GONE); should not receive any more touch- or click events. My layout has two parts, which

9条回答
  •  自闭症患者
    2020-12-13 03:54

    What I expect is happening is that you make a view invisible, but that views children still respond to clicks (ie your view is a ViewGroup). You could do something along the lines of:

    private void hideTheChildren(View v){
        if(v instanceof ViewGroup) {
            int count = ((ViewGroup)v).getChildCount();
            for(int k = 0 ; k < count ; k++) {
                hideTheChildren(((ViewGroup)v).getChildAt(k));
            }
            v.setVisibility(View.GONE);
        }
        else {
            v.setClickable(false);
            v.setVisibility(View.GONE);
        }
    }
    

    of course then you also have to do the opposite

    private void showTheChildren(View v){
        if(v instanceof ViewGroup) {
            int count = ((ViewGroup)v).getChildCount();
            for(int k = 0 ; k < count ; k++) {
                showTheChildren(((ViewGroup)v).getChildAt(k));
            }
            v.setVisibility(View.VISIBLE);
        }
        else {
            v.setClickable(true);
            v.setVisibility(View.VISIBLE);
        }
    }
    

    This has worked for me in the past. I don't currently know of a better way to do this.

提交回复
热议问题