先参考下ToolBar的使用和DrawableLayout的使用;

1、主界面布局,主要结构包含一个ToolBar和一个DrawableLayout,DrawableLayout里面有左侧边栏布局和主界面布局(注意ToolBar需要设置Theme,不然菜单项有些设置不起作用):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <android.support.v7.widget.Toolbar
android:id="@+id/toolbar_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/MainToolbarMenuStyle">
</android.support.v7.widget.Toolbar> <android.support.v4.widget.DrawerLayout
android:id="@+id/drawablelayout_main"
android:layout_width="match_parent"
android:layout_height="match_parent"> <!--左侧的布局-->
<RelativeLayout
android:id="@+id/layout_left"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@android:color/white">
<RelativeLayout
android:id="@+id/layout_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_centerHorizontal="true">
<ImageView
android:id="@+id/iv_user_head"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/user_demo"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/tv_user_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_user_head"
android:text="登录"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
</RelativeLayout> </android.support.v4.widget.DrawerLayout> </LinearLayout>

2、创建一个menu文件,里面只包含“搜索”项和“扫一扫”项:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/toolbar_search"
android:icon="@drawable/search"
android:orderInCategory="1"
app:showAsAction="always"/> <item
android:id="@+id/toolbar_scan"
android:icon="@drawable/scan"
android:orderInCategory="2"
app:showAsAction="never"
android:title="@string/toolbar_scan"/> </menu>

效果:

3、style中需要添加工具栏的样式:

<!--主界面标题栏,里面三项分别是菜单样式、右边溢出按键样式、左边箭头样式-->
<style name="MainActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="actionOverflowMenuStyle">@style/MainToolbarMenuStyle</item>
<!--<item name="actionOverflowButtonStyle">@style/MainOverflowButtonStyle</item>-->
<item name="drawerArrowStyle">@style/MainDrawerArrowToggle</item>
</style> <!--自定义toolbar菜单样式-->
<style name="MainToolbarMenuStyle" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<!-- 是否覆盖锚点,默认为true,即盖住Toolbar -->
<item name="overlapAnchor">false</item>
<!-- 弹出层背景颜色 -->
<item name="android:popupBackground">@color/toolbar_background</item>
<!-- 弹出层垂直方向上的偏移,负值会覆盖toolbar -->
<item name="android:dropDownVerticalOffset">5dp</item>
<!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 -->
<item name="android:dropDownHorizontalOffset">-2dp</item>
<!--文字颜色-->
<item name="android:textColor">@color/white</item>
<!-- 溢出菜单(三点)图标颜色-->
<item name="colorControlNormal">@android:color/white</item>
</style> //设置三点图标,需要取消注释上面“主界面标题栏”的代码
<style name="MainOverflowButtonStyle" parent="@android:style/Widget.ActionButton.Overflow">
<item name="android:src">@drawable/more</item>
</style> //设置左边箭头的图标颜色
<style name="MainDrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
<item name="color">@android:color/white</item>
</style>

4、minifest中对主界面进行绑定样式:

<activity android:name=".MainActivity" android:theme="@style/MainActivityTheme"/>

5、java代码中:

    private Toolbar toolbar_main;
private DrawerLayout drawerlayout_main;
    private void InitView(){
toolbar_main = findViewById(R.id.toolbar_main);
drawerlayout_main = findViewById(R.id.drawablelayout_main);
} private void setToolBar(){//使用ToolBar替换系统自带的ActionBar
setSupportActionBar(toolbar_main);
//设置返回图标
// toolbar_main.setNavigationIcon(R.mipmap.back);
getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置标题文本
toolbar_main.setTitle(R.string.app_name);
//标题文本颜色
toolbar_main.setTitleTextColor(Color.WHITE);
//设置logo图标
// toolbar_main.setLogo(R.drawable.toolbar_icon);
//副标题
// main_head.setSubtitle("副标题");
//工具栏背景
toolbar_main.setBackgroundColor(Color.BLUE);//创建返回键,并实现打开关/闭监听
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,drawerlayout_main, toolbar_main, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
};
mDrawerToggle.syncState();
drawerlayout_main.setDrawerListener(mDrawerToggle);
    //菜单项监听器
toolbar_main.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
String msg = "";
switch (menuItem.getItemId()) {
case R.id.toolbar_search:
msg += "search";
break;
case R.id.toolbar_scan:
msg += "scan";
break;
}
if(!msg.equals("")) {
myApp.MakeToast(msg);
}
return true;
}
});
} //绑定菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 绑定toobar跟menu
getMenuInflater().inflate(R.menu.menu_toolbar_main, menu);
return true;
} //要重写onPrepareOptionsPanel方法才可以显示出图标
@SuppressLint("RestrictedApi")
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
if (menu != null) {
if (menu.getClass() == MenuBuilder.class) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}

PS:手动关闭侧边栏的代码:

drawerlayout_main.closeDrawer(Gravity.LEFT);

效果如下:

ToolBar+Drawable实现一个好用的侧滑栏(侧边栏)和工具栏的更多相关文章

  1. 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果

    最近闲来无事,在网上寻找源代码看,突然发现了一个国内技术牛人开发的快速开发框架Andbase,花了一天时间研究了下源码和怎么使用,现将开发常见的侧滑栏和滑动标签页组合效果的使用介绍个大家,希望可以减少 ...

  2. Android 开发自己的网络收音机2——电台列表(SlidingMenu侧滑栏)

    上一篇文章总体规划了这个项目的情况,今天讲讲实现电台列表.今天其实主要想讲解的是SlidingMenu,也就是我们平时说的侧滑栏,现在很多应用都有用这种UI效果.SlidingMenu侧滑栏功能实现的 ...

  3. 安卓开发笔记(三十四):Material Design框架实现优美的左侧侧滑栏

    首先我们先上图:  下面是主页面的代码,activity_main.xml: <?xml version="1.0" encoding="utf-8"?& ...

  4. 微信小程序实现左侧滑栏

    前言 一直想给项目中的小程序设置侧滑栏,将退出按钮放到侧滑中,但是小程序没有提供相应的控件和API,因此只能自己手动实现,网上很多大神造的轮子很不错,本文就在是站在巨人的肩膀上实现. 效果 先看看效果 ...

  5. Android学习总结——DrawerLayout 侧滑栏点击事件穿透

    使用DrawerLayout实现侧滑栏功能时,点击侧滑栏空白处时,主界面会获得事件. 解决方法:侧滑栏布局添加 android:clickable="true"

  6. ViewDragHelper详解(侧滑栏)

    1.Drag拖拽:ViewDrag拖拽视图,拖拽控件:ViewDragHelper拖拽视图助手,拖拽操作类.利用ViewDragHelper类可以实现很多绚丽的效果,比如:拖拽删除,拖拽排序,侧滑栏等 ...

  7. 自定义控件学习——仿qq侧滑栏

    效果 主要步骤: 1. 在xml布局里摆放内容. include    2. 在自定义ViewGroup里, 进行measure测量, layout布局    3. 响应用户的触摸事件    4. i ...

  8. 【Android进阶】SlidingMenu实现侧滑栏效果的实现

    public class MainActivity extends Activity { @Override protected void onCreate(final Bundle savedIns ...

  9. 28 自定义View侧滑栏

    ScrollMenuView.java package com.qf.sxy.customview03.widget; import android.content.Context; import a ...

随机推荐

  1. js中this是什么?

    this是js的一个关键字 指定一个对象然后去替代他 分两种情况函数内的this和函数外的this 函数内的this指向行为发生的主体 函数外的this都指向window函数内的this跟函数在哪定义 ...

  2. Linux 练习题(2)

    3.  请使用命令行展开功能来完成以下练习:      (1). 创建/tmp目录下的:a_c, a_d, b_c, b_d [root@db146 ~]# mkdir /tmp/{a,b}_{c,d ...

  3. bootstrap table表格前台分页,点击tab选项,重新刷新表格

    近期做项目的时候使用bootstrap表格前台分页,并且有一个tab切换选项,共用一个table,效果如下图,上方是tab选项,下方是table: 在实际实现的时候,在默认状态下,表格翻到了第5页,此 ...

  4. ios-项目启动页面

    项目运行启动页面: 点工程项目targets-(或Images.xcasets)-LaunchImage(iphone四种规格图片:320*480/350*568/640*960/640*1136)将 ...

  5. Django 数据库迁移

    Django 数据库迁移 DATABASES = { # Django默认配置使用sqlite3数据库 # 'default': { # 'ENGINE': 'django.db.backends.s ...

  6. 如何在hanlp词典中手动添加未登录词

     我们在使用hanlp词典进行分词的时候,难免会出现分词不准确的情况,原因是由于内置词典中并没有收录当前的这个词,也就是我们所说的未登录词,只要把这个词加入到内置词典中就可以解决类似问题,如何操作,下 ...

  7. Springboot 允许跨域访问

    服务提供段Application.java中添加如下代码: @Beanpublic CorsFilter corsFilter() { UrlBasedCorsConfigurationSource ...

  8. 简述Ajax原理及实现步骤

    简述Ajax原理及实现步骤 1.Ajax简介 概念 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML). 现在允许浏览器与务器通信 ...

  9. 前端-JavaScript1-2——JavaScript建立认知

    关于首篇的“ Hello world ! ”这事儿吧,挺有意思,就是学习任何的语言,我们都喜欢在屏幕上直接输出一点什么,当做最简单.最基本的案例.输出什么大家随意,但是很多人都习惯输出“hello w ...

  10. [UE4]Throbber,横向动态图标

    一.Throbber跟Circular Throbber一样,都是用来提示玩家后台有数据正在加载中. 二.Throbber是横向显示动态图标.其他方面跟Circular Throbber一样.Circ ...