My layout contains ListView, SurfaceView and EditText. When I click on the EditText, it receives focus and the on-screen keyboard pops up. When I click somewhere outside of the EditText, it still has the focus (it shouldn’t).
I guess I could set up OnTouchListener‘s on the other views in layout and manually clear the EditText‘s focus. But seems too hackish…
I also have the same situation in the other layout – list view with different types of items, some of which have EditText‘s inside. They act just like I wrote above.
The task is to make EditText lose focus when user touches something outside of it.
I’ve seen similar questions here, but haven’t found any solution…
I tried all these solutions. edc598’s was the closest to working, but touch events did not trigger on other
Views contained in the layout. In case anyone needs this behavior, this is what I ended up doing:I created an (invisible)
FrameLayoutcalled touchInterceptor as the lastViewin the layout so that it overlays everything (edit: you also have to use aRelativeLayoutas the parent layout and give the touchInterceptorfill_parentattributes). Then I used it to intercept touches and determine if the touch was on top of theEditTextor not:Return false to let the touch handling fall through.
It’s hacky, but it’s the only thing that worked for me.