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.Toolbar
        android: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.DrawerLayout
        android:id="@+id/drawer"
        android:layout_width="220dp"
        android:layout_height="match_parent"
        android:layout_gravity="right">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <ListView
                android: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.Toolbar
        android: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.DrawerLayout
        android:id="@+id/drawer"
        android:layout_width="220dp"
        android:layout_height="match_parent"
        android:layout_gravity="right">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_gravity="right">
            <ListView
                android: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.childmenu


import 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.ListAdapter

import kotlinx.android.synthetic.main.app_bar.*


class AboutActivity : AppCompatActivity(), View.OnClickListener {
    val listMenuText = listOf<String>("关于", "下载升级")

    private var drawerOpenFlag : Boolean  = false

    override 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 = adapter

        Toast.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) 会异常!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值