gpt4 book ai didi

android - 如何通过在抽屉外触摸来防止关闭抽屉导航

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:20:29 27 4
gpt4 key购买 nike

我有一个带抽屉导航的 Activity 。如果用户设备是 table 并且方向是横向 - 我不需要通过单击抽屉中的项目来关闭抽屉:

if (!isTablet || context.getResources().getConfiguration().orientation==1) {
mDrawerLayout.closeDrawer(Gravity.START);
}

它起作用了。但是如果用户触摸打开的抽屉外面的屏幕 - 抽屉关闭。使用 DrawerLayout.LOCK_MODE_LOCKED_OPEN 是不合适的,因为我需要保存抽屉滑动功能。当用户触摸抽屉外部时,如何防止关闭抽屉导航?

请帮忙。

最佳答案

基于我写的另一个答案here .我已经修改了代码以适合您的问题。请检查。

查看有关触摸层次结构的更多信息 here

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);
}
}

注意:如问题评论中所述,这与 Android guidelines 相悖.所以尽量避免它,除非它是强制性的。

关于android - 如何通过在抽屉外触摸来防止关闭抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com