toolbar + DrawerLayout 实现抽屉菜单
编写公共toolbar+DrawerLayout 布局文件:
<?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"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/colorBase"android:minHeight="?attr/actionBarSize"android:theme="?attr/actionBarTheme"></androidx.appcompat.widget.Toolbar><androidx.drawerlayout.widget.DrawerLayoutandroid:id="@+id/drawer"android:layout_width="220dp"android:layout_height="match_parent"android:layout_gravity="right"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical"><ListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:divider="@color/colorWhite"android:dividerHeight="3dp"android:id="@+id/slide_menu"/></LinearLayout></androidx.drawerlayout.widget.DrawerLayout>
</LinearLayout>
在activity 代码中添加:
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.menu_realtime_data)initView()setSupportActionBar(toolbar)/*显示Home图标*/supportActionBar?.setDisplayHomeAsUpEnabled(true)toolbar.subtitle = "test"var toggle = ActionBarDrawerToggle(this, drawer, toolbar, 0, 0)toggle.syncState()drawer.addDrawerListener(toggle)drawer.setScrimColor(0x70bbbbbb)
... ...
默认使用系统toggle 监听,控制drawerlayout的弹出,回收。
如果居右边抽屉滑出:
<?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"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/colorBase"android:minHeight="?attr/actionBarSize"android:theme="?attr/actionBarTheme"app:navigationIcon="@drawable/back"><ImageView android:id="@+id/menu_btn"android:contentDescription="返回"android:layout_marginTop="1dp"android:layout_width="35dp"android:layout_height="35dp"android:paddingRight="5dp"android:layout_gravity="right"android:src="@drawable/menu_slide"/></androidx.appcompat.widget.Toolbar><androidx.drawerlayout.widget.DrawerLayoutandroid:id="@+id/drawer"android:layout_width="220dp"android:layout_height="match_parent"android:layout_gravity="right"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical"android:layout_gravity="right"><ListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:divider="@color/colorWhite"android:dividerHeight="3dp"android:id="@+id/slide_menu"/></LinearLayout></androidx.drawerlayout.widget.DrawerLayout>
</LinearLayout>
那么就不能使用toggle,需要自己定义button监听和控制DrawerLayout
package com.daobo.wand.childmenuimport android.graphics.Color
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemClickListener
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.daobo.wand.R
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.drawerlayout.widget.DrawerLayout
import com.daobo.wand.BR
import com.daobo.wand.adapter.ListAdapterimport kotlinx.android.synthetic.main.app_bar.*class AboutActivity : AppCompatActivity(), View.OnClickListener {val listMenuText = listOf<String>("关于", "下载升级")private var drawerOpenFlag : Boolean = falseoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.menu_about)setSupportActionBar(toolbar)/*显示Home图标*/supportActionBar?.setDisplayHomeAsUpEnabled(true)toolbar.subtitle = "国家电网山东省供电公司"toolbar.setNavigationOnClickListener {finish()}drawer.setDrawerListener(object : DrawerLayout.DrawerListener {override fun onDrawerStateChanged(arg0: Int) {}override fun onDrawerSlide(arg0: View, arg1: Float) {}override fun onDrawerOpened(arg0: View) {drawerOpenFlag = true}override fun onDrawerClosed(arg0: View) {drawerOpenFlag= false}})drawer.setScrimColor(0x70bbbbbb)var adapter = ListAdapter<String>(this, listMenuText,R.layout.tab_item_simple, BR.name)slide_menu.adapter = adapterToast.makeText(this, "关于本app版本,以及升级!", Toast.LENGTH_SHORT).show()slide_menu.onItemClickListener =OnItemClickListener { parent, view, position, id ->if(position == 0){Toast.makeText(this, "关于菜单!", Toast.LENGTH_SHORT).show()}else{Toast.makeText(this, "下载升级!", Toast.LENGTH_SHORT).show()}}menu_btn.setOnClickListener(this)}override fun onClick(v: View?) {//TODO("not implemented")// To change body of created functions use File | Settings | File Templates.when(v?.id) {R.id.menu_btn ->{//点击了if(!drawerOpenFlag) {drawer.openDrawer(Gravity.RIGHT)} else{drawer.closeDrawer(Gravity.RIGHT)}}}}
}
注意别忘了在manifest文件中,将activity 设置如下 android:theme="@style/Theme.AppCompat.Light.NoActionBar"
<activity android:name=".MainActivity"android:theme="@style/Theme.AppCompat.Light.NoActionBar"android:screenOrientation="landscape"/>
不然使用setSupportActionBar(toolbar) 会异常!
toolbar + DrawerLayout 实现抽屉菜单相关推荐
- android 抽屉组件,Android组件之DrawerLayout实现抽屉菜单
DrawerLayout组件同样是V4包中的组件,也是直接继承于ViewGroup类,所以这个类也是一个容器类. 抽屉菜单的摆放和布局通过android:layout_gravity属性来控制,可选值 ...
- android 2个界面抽屉,Android使用DrawerLayout创建左右两个抽屉菜单
在Android support.v4 中有一个抽屉视图控件DrawerLayout.使用这个控件,可以生成通过在屏幕上水平滑动打开或者关闭菜单,能给用户一个不错的体验效果. 最近在项目中,设计中有用 ...
- [UI]抽屉菜单DrawerLayout分析(三)
在[UI]抽屉菜单DrawerLayout分析(一)和[UI]抽屉菜单DrawerLayout分析(二)中分别介绍了DrawerLayout得基本框架结构和ViewDragerHelper的作用以及手 ...
- Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果
在以前,做策划导航的时候,最常用的组件便是SlidingMenu了,当初第一次用它的时候觉得那个惊艳啊,体验可以说是非常棒. 后来,Android自己推出了一个可以实现策划导航的组件DrawerLay ...
- android开发学习——关于activity 和 fragment在toolbar上设置menu菜单
在做一个项目,用的是Android Studio 系统的抽屉源码,但是随着页面的跳转,toolbar的title需要改变,toolbar上的menu菜单也需要改变,在网上找了好久,也尝试了很多,推荐给 ...
- Toolbar+DrawerLayout
Toolbar + DrawerLayout Toolbar DrawerLayout 配置文件 布局 程序 配置文件 <?xml version="1.0" encodin ...
- 如何使用React Native构建嵌套的抽屉菜单
by Dhruvdutt Jadhav 由Dhruvdutt Jadhav 如何使用React Native构建嵌套的抽屉菜单 (How to build a nested drawer menu w ...
- mysql抽屉图标_React Native自定义组件实现抽屉菜单控件效果
一.需求分析 原生开发中,自定义View可谓是屡见不鲜的事情,往往系统的控件总不能满足现实的需求.五花八门的产品设计需要我们做出不同的View.关于自定义View的内容网上已经有很多的博文,本篇博客要 ...
- ##报错:DrawerLayout must be measured with MeasureSpec.EXACTLY. - 在使用ToolBar+DrawerLayout可能会报这个错误 - 1,
##报错:DrawerLayout must be measured with MeasureSpec.EXACTLY. - 在使用ToolBar+DrawerLayout可能会报这个错误 - 1,自 ...
最新文章
- 基于iscsi实现文件存储共享
- 什么是IaaS, PaaS和SaaS及其区别
- python3 生成器的send_Python:生成器中send()的行为
- SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
- python 单向链表
- 【模拟遍历】剑指offer:替换空格
- 机器学习编译入门课程学习笔记第一讲 机器学习编译概述
- 编译原理用C语言编写递归下降分析程序,编译原理递归下降分析器(C语言).pdf
- 二叉查找树,平衡二叉树
- 因子分析法之因子旋转
- Mybatis的一级缓存和二级缓存,看完不再懵逼
- 13-JS中的面向对象
- 坦克大战(Tank Battalion)------Java代码实现
- 项目管理中的进度控制与目标计划
- ESP8266模块睡眠模式
- Altium Designer——PCB中更改线宽的技巧总结
- Windows操作系统查看电脑开关机记录
- leetcode——【猫和老鼠】
- 计算机二级office题库有多少道,计算机二级MS Office题库(600道).docx
- 【BLE】nrf connect配置为服务端进行蓝牙主从通信实验
热门文章
- usb 1-5.2: device not accepting address 4, error -110问题解决方案
- nuSVC的使用和解读
- navicat设置数据表的外键
- 苹果7手机计算机怎么看历史记录,苹果手机safari书签及其历史记录怎么恢复
- mysql自动dump脚本_MySQL--简单mysqldump脚本
- 如何切换 SVN 用户名
- oracle备份与恢复--闪回技术
- Winform开发框架之通用短信邮件通知模块
- Linux下程序报出/bin/bash: No such file or directory
- iOS 苹果app提交 ITC.apps.validation.prerelease_build_missing