我想从导航抽屉安卓中删除滚动模式



我想从导航抽屉中删除此空间

我想从导航抽屉中删除滚动模式或任何用于创建没有菜单的自定义导航抽屉的解决方案

这是我的布局代码。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
tools:openDrawer="end">
<include
layout="@layout/app_bar_live"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
app:headerLayout="@layout/nav_header_live"
android:overScrollMode="never" />
</android.support.v4.widget.DrawerLayout>

创建一个真正自定义的 NavDrawer 是可能的,只需对组件进行少量调整。

以下是步骤:

1 - 没有菜单布局,只有headerView

<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view_end"
android:layout_width="match_parent"
android:layout_marginLeft="-64dp"
android:layout_marginStart="-64dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:fitsSystemWindows="true"
app:headerLayout="@layout/shop_list"
/>

请注意,我将边距开始和左边距设置为 -64dp。这是为了让抽屉布局是全宽的。

2 - 禁用导航菜单视图的滚动

即使我们没有放置菜单布局,它仍然是创建的,我们需要访问它并禁用滚动。由于此视图是 RecyclerView 的实例,因此我们只需要覆盖它的布局管理器并禁用垂直滚动。

private fun disableMenuScroll(navView: NavigationView) {
val navMenu = navView.getChildAt(0) as NavigationMenuView
navMenu.layoutManager = object : LinearLayoutManager(this) {
override fun canScrollVertically(): Boolean {
return false
}
}
}

3 - 将标题布局设置为全高

在这里,我们使用反射从HeaderView获取presenter,并从该演示者那里获得保存 headerLayout 的LinearLayout。该LinearLayout不会让我们的布局拉伸以匹配父级。我们只需更改该LinearLayout的LayoutParams即可完成。

private fun changeDrawerLayoutHeight(navView: NavigationView) {
/*With reflection get the navView's presenter*/
val field = navView.javaClass.getDeclaredField("presenter")
field.isAccessible = true
val presenter = field.get(navView) as NavigationMenuPresenter
/*From presenter, get the header layout field*/
val layoutField = presenter.javaClass.getDeclaredField("headerLayout")
layoutField.isAccessible = true
val headerLayout = layoutField.get(presenter) as LinearLayout
/*Set layout params on the HeaderLayout to match parent*/
val params = headerLayout.layoutParams
params.height = LinearLayout.LayoutParams.MATCH_PARENT
headerLayout.layoutParams = params
}

此代码在哪里执行?

在活动onCreate方法中。以下是执行此操作所需的代码:

val navView = findViewById<NavigationView>(R.id.nav_view_end)
disableMenuScroll(navView)
changeDrawerLayoutHeight(navView)

希望这对某人有所帮助!

尝试将其添加到根标记(android.support.v4.widget.DrawerLayout(...希望对您有所帮助。

android:fitsSystemWindows="true"

并尝试从根标签和导航视图中删除该android:overScrollMode

最新更新