为什么NavigationView应该最后放在XML Layout文件中?

问题描述 投票:1回答:1

我正在开发一个Android应用程序,其中我有一个NavigationView。随着 NavigationView 我的Layout文件由一个LinearLayout组成。为了使NavigationView的菜单项可以点击,我实现了以下功能 NavigationView.OnNavigationItemSelectedListener 的接口。但是,在点击了这个项目之后,方法 onNavigationItemSelected 没有被叫到。后来我发现,通过 将NavigationView放在最后但整个过程都能如期进行。谁能解释一下这种行为?

android androidx
1个回答
0
投票

如果你看一下DrawerLayout's的 onInterceptTouchEvent 方法,你会看到这个方法在一个叫做 ACTION_DOWN 事件。

final View child = mLeftDragger.findTopChildUnder((int) x, (int) y);
if (child != null && isContentView(child)) {
    interceptForTap = true;
}

这将导致 onInterceptTouchEvent 返回 true导致的点击事件将被从子视图中窃取,并被调用在 DrawerLayout 而不是。

ViewDragHelper.findTopChildUnder 只是以相反的顺序扫描子代,所以它先找到内容视图,因为你把它放在最后。

© www.soinside.com 2019 - 2024. All rights reserved.