android View with View.GONE still receives onTouch and onClick

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 will be visible or gone so that only one of them is visible and usable at a time but View.GONE doesn’t do the trick.
I can’t see the GONE view, as expected, but it still reacts to onClick (and consumes the event the other view should get).

  • Image recognition for Android augmented reality app
  • Is this how to schedule a java method to run 1 second later?
  • Adding rows into Cursor manually
  • Android ViewPager with RecyclerView works incorrectly inside BottomSheet
  • Android Eclipse Error “Android Packaging Problem”
  • Android's SSLServerSocket causes increasing native memory in the App, OOM
  • Can you help me?

    Maybe of interest:
    When I start my project one view is GONE, the other visible. This time it will work as expected (the GONE view is basically ignored), but after setting View.GONE through the code it’ll stop working.

    Related posts:

    Service like testflight for iOS + Android + BlackBerry
    How to shrink a finishing activity to a rectangle
    How to check the size of dependencies in an android app?
    How do I keep my screen unlocked during USB debugging?
    Disabling chrome data saver while debugging
    Is it possible to use crosswalk-cordova inside of Android Studio?
  • How to create a Uri from a URL?
  • Get access to USB mass storage device in android
  • Android geocoder reverse location - reliable way to get the city?
  • Fatal Error: Invalid Layout of java.lang.String at value
  • Android HashMap in Bundle?
  • Android flood-fill algorithm
  • 9 Solutions collect form web for “android View with View.GONE still receives onTouch and onClick”

    Do you maybe use animations to show/hide the views? I get this behaviour when I use animations that have android:fillEnabled=”true” android:fillAfter=”true”
    Don’t understand it, and seems like a bug – if I use animations without fillEnabled/fillAfter, all works as expected…

    If you set setVisibility(View.GONE) after some animation (fade out, for example), then try clearing the animation with clearAnimation(). This is what helped me.

    Try setting clickable property to false using setClickable(false) after setVisibility(View.GONE)

    Yes,mview.clearAnimation() have some issuses but amination.setFillAfter(false);and mview.setClickable(false); WORKS perfect .

    I would have post this as a comment, but unfortunately I was not able to post a comment. As it could be a possible solution for you, i post it that way:

    As you write “onClick” I assume you’re using the onClick attribute in your XML layout. Try to set an OnClickListener with setOnClickListener instead of the onClick attribute. Maybe this helps…

    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.

    try adding .clearAnimation() in the onAnimationEnd override.

    if have a animation at the view, you should call view.clearAnimation.

    For those that did the answers above and still didn’t solve their problems, I recommend removing the view from the parent view. If you need display the view again, just make a copy and add it to the parent view.

    This might seem overkill but I was hiding / showing whole view groups in your case it might be a button, textview or image, this solution will still work.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.