Android 使用DrawerLayout快速实现侧滑菜单

news/2024/11/29 19:52:15/

一、概述

DrawerLayout是一个可以方便的实现Android侧滑菜单的组件,我最近开发的项目中也有一个侧滑菜单的功能,于是DrawerLayout就派上用场了。如果你从未使用过DrawerLayout,那么本篇博客将使用一个简单的案例带你迅速掌握DrawerLayout的用法。

二、效果图

这里写图片描述

三、代码实现

主布局activity_main.xml

<?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"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"android:fitsSystemWindows="true"android:orientation="vertical"><android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/blueStatus"android:minHeight="?attr/actionBarSize"app:navigationIcon="?attr/homeAsUpIndicator"app:theme="@style/Theme.AppCompat.NoActionBar"></android.support.v7.widget.Toolbar><include layout="@layout/title_layout" /><android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"tools:openDrawer="start"><ListView
            android:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent" /><LinearLayout
            android:layout_width="260dp"android:layout_height="match_parent"android:layout_gravity="right"><include layout="@layout/drawer_content" /></LinearLayout></android.support.v4.widget.DrawerLayout>
</LinearLayout>

To use a DrawerLayout, position your primary content view as the first child with a width and height of match_parent. Add drawers as child views after the main content view and set the layout_gravity appropriately. Drawers commonly use match_parent for height with a fixed width.

当你使用DrawerLayout的时候,DrawerLayout的第一个元素就是主要内容区域(在本案例中是ListView),它的宽高必须是match_parent。
在主要内容区域的后面添加侧滑视图(在本案例中是drawer_content.xml),并且通过设置layout_gravity来决定它是左滑还是右滑,通常这个侧滑视图的高度设为match_parent。

drawer_content.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/background"android:orientation="vertical"android:padding="@dimen/activity_horizontal_margin"><TextViewstyle="@style/NormalTextView"android:layout_width="wrap_content"android:layout_height="40dp"android:text="船中文名" /><EditTextstyle="@style/SmallGreyTextView"android:layout_width="match_parent"android:layout_height="40dp"android:background="@drawable/btn_round_white"android:padding="@dimen/margin_8" /><TextViewstyle="@style/NormalTextView"android:layout_width="wrap_content"android:layout_height="40dp"android:text="船英文名" /><EditTextstyle="@style/SmallGreyTextView"android:layout_width="match_parent"android:layout_height="40dp"android:background="@drawable/btn_round_white"android:padding="@dimen/margin_8" /><TextViewstyle="@style/NormalTextView"android:layout_width="wrap_content"android:layout_height="40dp"android:text="呼号" /><EditTextstyle="@style/SmallGreyTextView"android:layout_width="match_parent"android:layout_height="40dp"android:background="@drawable/btn_round_white"android:padding="@dimen/margin_8" /><TextViewstyle="@style/NormalTextView"android:layout_width="wrap_content"android:layout_height="40dp"android:text="IMO" /><EditTextstyle="@style/SmallGreyTextView"android:layout_width="match_parent"android:layout_height="40dp"android:background="@drawable/btn_round_white"android:padding="@dimen/margin_8" /><TextViewstyle="@style/NormalTextView"android:layout_width="wrap_content"android:layout_height="40dp"android:text="MMSI" /><EditTextstyle="@style/SmallGreyTextView"android:layout_width="match_parent"android:layout_height="40dp"android:background="@drawable/btn_round_white"android:padding="@dimen/margin_8" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"><Buttonandroid:id="@+id/btn_confirm"style="@style/NormalGreyTextView"android:layout_width="80dp"android:layout_height="36dp"android:layout_alignParentRight="true"android:layout_centerInParent="true"android:layout_gravity="center_vertical"android:background="@drawable/btn_round_red"android:gravity="center"android:text="查询"android:textColor="@color/white" /></RelativeLayout></LinearLayout>

这个布局文件就是侧滑视图,如图:
这里写图片描述

MainActivity.java
package com.leohan.drawerlayoutdemo;import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;public class MainActivity extends AppCompatActivity {@InjectView(R.id.toolbar)Toolbar toolbar;@InjectView(R.id.tv_search)TextView tvSearch;@InjectView(R.id.listView)ListView listView;@InjectView(R.id.drawer_layout)DrawerLayout drawerLayout;private List data = new ArrayList();private ShipRecordAdapter adapter = new ShipRecordAdapter(this, data);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.inject(this);setSupportActionBar(toolbar);listView.setAdapter(adapter);getData();}@Overridepublic void onBackPressed() {if (drawerLayout.isDrawerOpen(GravityCompat.START)) {drawerLayout.closeDrawer(GravityCompat.START);} else {super.onBackPressed();}}/*** 获取类别数据*/private void getData() {for (int i = 0; i < 6; i++) {Map<String, Object> map = new HashMap<>();data.add(map);}adapter.notifyDataSetChanged();}@OnClick(R.id.tv_search)public void onClick(View view) {switch (view.getId()) {case R.id.tv_search:if (drawerLayout.isDrawerOpen(Gravity.RIGHT)) {drawerLayout.closeDrawer(Gravity.RIGHT);} else {drawerLayout.openDrawer(Gravity.RIGHT);}break;}}
}

由于这里的侧滑视图是从右侧滑动出现的,因此侧滑视图的layout_gravity设置为right或者end,如果是左滑就设置为left或者start。当我们手动控制侧滑视图的打开或者关闭的时候,需要执行以下代码:

//close
drawerLayout.closeDrawer(Gravity.RIGHT);
//open
drawerLayout.openDrawer(Gravity.RIGHT);

至此DrawerLayout的基本使用就已经掌握了,更深入的了解DrawerLayout,请参考Google官方文档Creating a Navigation Drawer。

项目源码:https://github.com/leoleohan/DrawerLayoutDemo


http://www.ppmy.cn/news/278589.html

相关文章

android侧滑菜单 动画,Android 打造完美的侧滑菜单/侧滑View控件

一.概述 在App中,经常会出现侧滑菜单,侧滑滑出View等效果,虽然说Android有很多第三方开源库,但是实际上 咱们可以自己也写一个自定义的侧滑View控件,其实不难,主要涉及到以下几个要点: 1.对Android中Window类中的DecorView有所了解 2.对Scroller类实现平滑移动效果 3.自…

Android RecyclerView —— 实现侧滑菜单

RecyclerView侧滑删除可以通过ItemTouchHelper来实现&#xff0c;但侧滑菜单栏没有原生的实现方式&#xff0c;我就尝试重写RecyclerView的onInterceptEvent和onTouchEvent方法来实现侧滑菜单&#xff0c;下面来讲下我的实现思路。文章底部有源码&#xff0c;已封装可直接使用。…

Android RecyclerView 侧滑菜单、长按拖拽

SwipeRecyclerView 支持侧滑菜单、长按拖拽、Header、Footer、Loading(加载更多) 注意&#xff1a;不持支com.android.support项目。如果要使用可以下载源码自己AndroidStudio转support使用。 预览 Fix 2022.7.25.1 1.分页插入数据类型异常bug 2.扩展类及其监听修改 3.包名修…

RecyclerView侧滑删除

自定义 RecyclerView 侧滑删除&#xff0c;下面是左滑删除和右滑删除的效果图&#xff1a; CSDN下载地址&#xff1a;https://download.csdn.net/download/wuqingsen1/10782610 GitHub下载地址&#xff1a;https://github.com/wuqingsen/RecyclerViewSide 下面是主要内容&…

Android-屏幕左右侧滑(二)

第二种方式我们介绍的是使用Android源生控件android.support.v4.widget.DrawerLayout来实现屏幕的左侧滑和右侧滑&#xff08;其中包括点击侧滑和手动滑动侧滑&#xff09;&#xff0c;还可以用代码来控制打开和关闭手动侧滑: 先付上两张效果图供参考&#xff0c;如下&#xf…

android studio 侧滑菜单,Android Studio实现侧滑菜单(最佳)

在CSDN中我们会看到很多侧滑的案例,但是有的不是少这个就是少那个,很浪费时间,所以我们要仔细看看代码全不全。在多种APP里,比如QQ的主页面就有向右滑动出现菜单栏的情况,今天就来看一下如何实现这种功能。 我的工程文件布局如下: 我们可以看到,侧滑菜单主要由两个页面组…

Android BaseRecyclerViewAdapterHelper拖动和侧滑删除

1.适配器 adapter继承BaseItemDraggableAdapte public class ItemDragAdapter extends BaseItemDraggableAdapter<BsInventoryBeanSub, BaseViewHolder> {//BsInventoryBeanSub是我的Bean类public ItemDragAdapter(List<BsInventoryBeanSub> data) {super(R.layo…

android侧滑菜单的监听,Android侧滑菜单控件DrawerLayout使用详解

DrawerLayout是Android V4包下一个带有侧滑功能的布局控件,可以根据手势展开与隐藏侧边栏,也可以随着侧边栏的点击改变主界面区的内容。并且只需要按照DrawerLayout规定的布局格式进行布局,即可实现左右侧滑效果。 一、约定的抽屉布局 DrawerLayout的布局一般分为三个部分:…