Specifically using the code below, is there a way to modify it so that the activity under this newly created view does not receive any gestures?
View v1 = new Vi
I think the best approach is to add a touch event and set return value True
As you can see here:
someView.setOnTouchListener(object: View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean{
return true
}
})
returning True means that the top view is handling the touch and no need to hand over the touch event to other views related.
Add an onTouchEvent
method to the view with top position then return true. True will tell the event bubbling that the event was consumed therefore prevent event from bubbling to other views.
protected boolean onTouchEvent (MotionEvent me) {
return true;
}
For v1
you would do an import:
import android.view.View.OnTouchListener;
Then set the onTouchListener:
v1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
You can do this too. You can set touch listener to child view and then in onTouch()
event, you can block intercept touch event
of parent.
i.e.
View v = findViewById(R.id.sample_view);
v.setOnTouchListener(new OnTouchListener() {
// Setting on Touch Listener for handling the touch inside ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
// Disallow the touch request for parent scroll on touch of child view
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
View v1 = new View(this);
v1.setClickable(true);
v1.setFocusable(true);
OR
<View
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My button"
android:focusable="true"
android:clickable="true"/>
This will prevent touch and click events from being propagated to views that stay below your view.
Or if you inflate the View then to .xml add android:clickable="true"
Just add a click delegate to the top view background, that will stop the views underneath receiving touches
linear_layout_background.Click += delegate
{
// Ensures views underneath does not receive touch events
};
You add a view like below, but make sure it is the last view you add to your xml. The last item in the xml is the item that lays on top of all the other views under it.
<View
android:id="@+id/blocking_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#AA666666"
android:clickable="true"
android:focusable="true"
android:visibility="visible"/>