【Android开发-29】Android中滑动菜单DrawerLayout用法介绍

1,DrawerLayout基本用法说明

DrawerLayout是Android中的一个布局组件,它允许用户通过滑动屏幕来打开和关闭一个侧边栏(抽屉)。DrawerLayout通常与ActionBar一起使用,以提供导航功能。

DrawerLayout的主要属性如下:

drawer_open:当抽屉处于打开状态时,此属性的值为true;当抽屉处于关闭状态时,此属性的值为false。

drawer_lock_mode:用于锁定DrawerLayout的模式,可选值有:lock_mode_unlocked(解锁模式)、lock_mode_locked_closed(锁定并关闭抽屉)和lock_mode_locked_open(锁定并打开抽屉)。

drawer_gravity:指定抽屉相对于屏幕的位置,可选值有:start(从屏幕左侧开始)、top(从屏幕顶部开始)和end(从屏幕右侧开始)。

drawer_margin:指定抽屉距离屏幕边缘的距离。

drawer_elevation:指定抽屉在屏幕上的高度。

drawer_selector:用于设置抽屉的背景颜色或图片。

在Android中,DrawerLayout是一个用于实现侧滑菜单的布局。以下是一个简单的DrawerLayout用法代码:

首先,在布局文件中添加DrawerLayout和两个FrameLayout(一个用于主内容,另一个用于抽屉内容):

cpp 复制代码
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/darker_gray"
        android:dividerHeight="0.5dp"
        android:background="@android:color/white"
        android:listSelector="@android:color/darker_gray" />

</androidx.drawerlayout.widget.DrawerLayout>

在Activity中设置DrawerLayout的监听器,以便在打开或关闭抽屉时执行相应的操作:

cpp 复制代码
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private ListView mLeftDrawer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = findViewById(R.id.drawer_layout);
        mLeftDrawer = findViewById(R.id.left_drawer);

        // 设置左侧抽屉的点击事件
        mLeftDrawer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // 在这里处理左侧抽屉的点击事件,例如切换Fragment等
            }
        });

        // 设置DrawerLayout的监听器
        mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                // 在这里处理抽屉滑动事件,例如更新侧滑菜单图标等
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                // 在这里处理抽屉打开事件,例如显示侧滑菜单等
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                // 在这里处理抽屉关闭事件,例如隐藏侧滑菜单等
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                // 在这里处理抽屉状态改变事件,例如根据新状态更新侧滑菜单图标等
            }
        });
    }
}

这样,你就完成了一个简单的DrawerLayout用法代码。你可以根据需要修改左侧抽屉的内容和点击事件,以及处理其他相关事件。

2,NavigationView用法说明

在Android中,DrawerLayout和NavigationView通常用于实现侧滑菜单。以下是一个简单的DrawerLayout和NavigationView用法代码:

首先,在布局文件中添加DrawerLayout和NavigationView:

cpp 复制代码
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 主内容区域 -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- 左侧导航栏 -->
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

在Activity中设置DrawerLayout的监听器,以便在打开或关闭抽屉时执行相应的操作:

cpp 复制代码
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import android.os.Bundle;
import com.google.android.material.navigation.NavigationView;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private NavigationView mNavView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = findViewById(R.id.drawer_layout);
        mNavView = findViewById(R.id.nav_view);

        // 设置NavigationView的点击事件
        mNavView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                int id = item.getItemId();

                // 根据选中的菜单项执行相应的操作,例如切换Fragment等

                // 关闭抽屉
                mDrawerLayout.closeDrawers();

                return true;
            }
        });
    }
}

这样,你就完成了一个简单的DrawerLayout和NavigationView用法代码。你可以根据需要修改左侧导航栏的内容和点击事件,以及处理其他相关事件。

menu布局文件(例如activity_main_drawer.xml):

cpp 复制代码
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="Home" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/ic_photo_library_black_24dp"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/ic_slideshow_black_24dp"
            android:title="Slideshow" />
        <item
            android:id="@+id/nav_tools"
            android:icon="@drawable/ic_settings_black_24dp"
            android:title="Tools" />
    </group>
</menu>

headerLayout布局文件(例如nav_header_main.xml):

cpp 复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:src="@drawable/ic_menu_camera" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="Android Studio"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

</LinearLayout>
相关推荐
GISer_Jing2 小时前
跨平台Hybrid App开发实战指南
android·flutter·react native
新之助小锅4 小时前
java版连接汇川PLC,发送数据,读取数据,保持重新链接,适用安卓
android·java·python
2501_916007475 小时前
iOS性能调试工具终极指南,从系统底层到多端协同的全方位优化实践(2025版)
android·ios·小程序·https·uni-app·iphone·webview
2501_915921435 小时前
iOS崩溃日志深度分析与工具组合实战,从符号化到自动化诊断的完整体系
android·ios·小程序·uni-app·自动化·cocoa·iphone
执念WRD8 小时前
熊海CMS v1.0代码审计实战
android·nginx·安全·web安全·网络安全·系统安全
jllllyuz8 小时前
基于ThinkPHP实现动态ZIP压缩包的生成
android
百***920210 小时前
【MySQL】MySQL库的操作
android·数据库·mysql
2501_9160088912 小时前
没有源码如何加密 IPA 实战流程与多工具组合落地指南
android·ios·小程序·https·uni-app·iphone·webview
2501_9400940213 小时前
PS1模拟器 DuckStation更新最新版整合 下载即玩 附PS1Bios/游戏/金手指 安卓版+电脑版
android·游戏·电脑
橙武低代码15 小时前
业务流低代码平台:从理念到实战
android·低代码·ai编程