编写公共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) 会异常!