【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>
相关推荐
周全全5 分钟前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
- 羊羊不超越 -41 分钟前
App渠道来源追踪方案全面分析(iOS/Android/鸿蒙)
android·ios·harmonyos
wk灬丨1 小时前
Android Kotlin Flow 冷流 热流
android·kotlin·flow
千雅爸爸1 小时前
Android MVVM demo(使用DataBinding,LiveData,Fresco,RecyclerView,Room,ViewModel 完成)
android
晨曦_子画2 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
孤客网络科技工作室2 小时前
AJAX 全面教程:从基础到高级
android·ajax·okhttp
Mr Lee_4 小时前
android 配置鼠标右键快捷对apk进行反编译
android
顾北川_野4 小时前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
&岁月不待人&4 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin