阅读 1431

Android导航面板:底部导航+侧滑菜单

展示效果

image

项目地址

首先新建项目,分别勾选kotlin和AndroidX支持,并引入框架

image

打开主活动布局,拖入控件,调好属性

侧滑菜单代码放在抽屉布局底部,并指定布局重力,选择start或end,表示左侧或右侧。

主界面需要用一个单独布局包裹起来,这样才不会导致底部菜单和侧滑冲突。

底部菜单视图和侧滑菜单视图要指定menu属性,和建普通菜单一样。

image


<!--抽屉布局作为根布局-->

<androidx.drawerlayout.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:layout_width="match_parent"

        android:layout_height="match_parent"

        android:id="@+id/drawerLayout"

        android:fitsSystemWindows="true"

        tools:openDrawer="start"

        tools:context=".ui.activity.MainActivity">

    <!--约束布局作为主界面父布局-->

    <androidx.constraintlayout.widget.ConstraintLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent">

        <androidx.appcompat.widget.Toolbar

                android:layout_width="match_parent"

                android:layout_height="?attr/actionBarSize"

                app:layout_constraintStart_toStartOf="parent"

                android:theme="@style/ToolbarTheme"

                app:layout_constraintTop_toTopOf="parent"

                app:layout_constraintEnd_toEndOf="parent"

                android:id="@+id/toolbar"

                android:background="@color/colorPrimary"

                app:layout_constraintBottom_toTopOf="@+id/navHost"/>

        <!--导航碎片-->

        <fragment

                android:name="androidx.navigation.fragment.NavHostFragment"

                android:layout_width="0dp"

                android:layout_height="0dp"

                app:navGraph="@navigation/navigation_mobile"

                app:defaultNavHost="true" android:id="@+id/navHost"

                app:layout_constraintTop_toBottomOf="@+id/toolbar"

                app:layout_constraintEnd_toEndOf="parent"

                app:layout_constraintStart_toStartOf="parent"

                app:layout_constraintBottom_toTopOf="@+id/navBTM"/>

        <!--底部导航菜单-->

        <com.google.android.material.bottomnavigation.BottomNavigationView

                android:layout_width="0dp"

                android:layout_height="wrap_content"

                app:menu="@menu/bottom_menu"

                app:layout_constraintStart_toStartOf="parent"

                app:layout_constraintEnd_toEndOf="parent"

                app:layout_constraintBottom_toBottomOf="parent"

                android:id="@+id/navBTM"

                app:layout_constraintHorizontal_bias="0.0"

                app:layout_constraintTop_toBottomOf="@+id/navHost"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

    <!--侧边栏放在抽屉布局底部才能实现侧滑-->

    <com.google.android.material.navigation.NavigationView

            android:layout_width="wrap_content"

            android:layout_height="match_parent"

            android:layout_gravity="start"

            app:menu="@menu/slide_menu"

            android:fitsSystemWindows="true"

            app:headerLayout="@layout/header_layout"

            app:layout_constraintStart_toStartOf="parent"

            app:layout_constraintEnd_toEndOf="parent"

            app:layout_constraintTop_toTopOf="parent"

            android:id="@+id/slideView"/>

</androidx.drawerlayout.widget.DrawerLayout>

复制代码

首先在res文件夹下新建一个安卓资源目录 navigation

image

建一些碎片,可分如下两种方法

在导航面板点击按钮创建, 当页面太多,需要点击右上角闪亮的星星按钮,调整为漂亮的格式。

image

* 右键新建找到碎片,如果是MVVM架构需要 Fragment+ViewModel, 如果不是就选择普通的

[图片上传中...(image-405d78-1543726827274-1)]

在主活动绑定上导航控制器,侧滑和底部都要绑定

image

文章分类
Android
文章标签