Ant*_*kov 5 android touch navigation-drawer
我有一个带有导航抽屉的活动。如果用户设备在桌子上并且方向是横向-我不需要通过单击抽屉中的项目来关闭抽屉:
if (!isTablet || context.getResources().getConfiguration().orientation==1) {
mDrawerLayout.closeDrawer(Gravity.START);
}
Run Code Online (Sandbox Code Playgroud)
这行得通。但是,如果用户在打开的抽屉外面触摸屏幕-抽屉关闭。不适合使用DrawerLayout.LOCK_MODE_LOCKED_OPEN,因为我需要保存抽屉滑动功能。 当用户触摸抽屉外部时,如何防止关闭导航抽屉?
请帮忙。
基于我在这里写的其他答案。我已经修改了代码以满足您的问题。请检查。
在此处查看有关触摸层次结构的更多信息
dispatchTouchEvent()方法应该在Activity类中重写
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isDrawerOpen()) { //Your code here to check whether drawer is open or not.
View content = findViewById(R.id.drawer); //drawer view id
int[] contentLocation = new int[2];
content.getLocationOnScreen(contentLocation);
Rect rect = new Rect(contentLocation[0],
contentLocation[1],
contentLocation[0] + content.getWidth(),
contentLocation[1] + content.getHeight());
if (!(rect.contains((int) event.getX(), (int) event.getY()))) {
isOutSideClicked = true;
} else {
isOutSideClicked = false;
}
} else {
return super.dispatchTouchEvent(event);
}
} else if (event.getAction() == MotionEvent.ACTION_DOWN && isOutSideClicked) {
isOutSideClicked = false;
return super.dispatchTouchEvent(event);
} else if (event.getAction() == MotionEvent.ACTION_MOVE && isOutSideClicked) {
return super.dispatchTouchEvent(event);
}
if (isOutSideClicked) {
return true; //restrict the touch event here
}else{
return super.dispatchTouchEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:正如问题评论中提到的,这违反了Android 指南。因此,除非是强制性的,否则请尽量避免使用它。
| 归档时间: |
|
| 查看次数: |
4368 次 |
| 最近记录: |