自定义Toolbar与NavigationView布局:返回按钮被遮挡求助
嘿,我来帮你搞定这个困扰!你的问题核心是NavigationView默认会从屏幕顶部滑出,直接覆盖了Toolbar区域,导致左上角的返回按钮被遮挡。下面给你两种简单可行的解决方案:
方案一:给NavigationView添加顶部边距,避开Toolbar
直接在你的NavigationView标签里添加一个顶部边距,让它从Toolbar的底部开始显示:
<android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:id="@+id/navview" android:layout_marginTop="?attr/actionBarSize" <!-- 新增这行 --> app:headerLayout="@layout/drawer_layout" app:menu="@menu/menu" > </android.support.design.widget.NavigationView>
?attr/actionBarSize会自动匹配你设置的Toolbar高度,这样NavigationView就不会覆盖Toolbar,左上角的返回按钮自然就露出来了。
方案二:调整布局结构,把Toolbar放在DrawerLayout外部
如果希望Toolbar始终固定在顶部,不受侧边栏影响,可以把Toolbar从RelativeLayout里移出来,放在DrawerLayout的外层:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.loveb.demo_viewpager.MainActivity"> <!-- 把Toolbar放在最外层 --> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary" android:id="@+id/toolbar" > </android.support.v7.widget.Toolbar> <android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/dl" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/toolbar" android:id="@+id/tablayout" android:background="@color/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_below="@+id/tablayout" android:id="@+id/pager"> </android.support.v4.view.ViewPager> </RelativeLayout> <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:id="@+id/navview" app:headerLayout="@layout/drawer_layout" app:menu="@menu/menu" > </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout> </LinearLayout>
这种方式下,Toolbar属于整个页面的顶部区域,侧边栏滑出时只会覆盖下方的内容,完全不会影响Toolbar上的按钮。
额外提示:确保代码里正确配置DrawerToggle
别忘了在Activity代码里设置ActionBarDrawerToggle,这样才能实现汉堡图标和返回箭头的正确切换:
Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawerLayout = findViewById(R.id.dl); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawerLayout.addDrawerListener(toggle); toggle.syncState();
两种方案都能完美解决你的问题,你可以根据自己的布局需求来选择~
内容的提问来源于stack exchange,提问作者Love Babbar
相关产品推荐
相关产品推荐

