先参考下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. BIOS + MBR > UEFI + GPT

    BIOS + MBR > UEFI + GPT硬件接口系统与磁盘分区UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR. 名词解释: BIOS (Basic Input/Output S ...

  2. 谈一谈Crsf和XSS攻击

    crsf 和 XSS CRFS攻击全称是一种利用cookie的漏洞进行的一种跨域请求伪造: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一 ...

  3. POJ3017 Cut the Sequence

    题意 Language:Default Cut the Sequence Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 122 ...

  4. 查看linux系统CPU及内存配置

    总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep & ...

  5. linux下一些重要命令的了解

    linux下一些比较重要的命令: du命令: 查看使用空间: 格式: du [选项][文件] 参数: -a  显示目录中个别文件的大小. -b  显示目录或文件大小时,以byte为单位. -c  除了 ...

  6. golang web framework--Martini

    Martini是一个功能强大的软件包,用于在Golang中快速编写模块化Web应用程序/服务. 下载 $ go get github.com/go-martini/martini Demo serve ...

  7. Linux之目录结构配置

    因为 Linux 的开发者实在太多了,如果每个人都发展出属于自己的目录配置方法, 那么将可能会造成很多管理上的困扰.所以,就有一个叫做Filesystem Hierarchy Standard (FH ...

  8. “永恒之蓝”(Wannacry)蠕虫全球肆虐 安装补丁的方法

    “永恒之蓝”利用0day漏洞 ,通过445端口(文件共享)在内网进行蠕虫式感染传播,没有安装安全软件或及时更新系统补丁的其他内网用户就极有可能被动感染,所以目前感染用户主要集中在企业.高校等内网环境下 ...

  9. docker 学习(九) docker部署静态网站

    一:  dockerfile, 把Dockerfile和myfolder放在一个目录下: FROM httpd:2.4 COPY ./myfolder/ /usr/local/apache2/htdo ...

  10. Hibernate Criteria使用

    hibernate中Criteria的完整用法 Criteria 是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现.SQL语句如何编写,是Hibernate框架的核心 ...