自定义xml设置ToolBar,通过menu文件扩展选项,通过继承baseactivity使用

1.ToolBar布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@color/color_bg_toolbar">
<ImageView
android:id="@+id/title_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:visibility="gone"
android:src="@mipmap/ic_back"/>
<TextView
android:id="@+id/title_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_gravity="center_horizontal"
android:textSize="20sp"
android:textColor="@color/color_bg_write"
android:text="@string/app_name"/>
<TextView
android:id="@+id/title_rightTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_marginRight="10dp"
android:layout_gravity="right"
android:textColor="@color/color_bg_write"
android:text="@string/app_name"
android:visibility="gone"/>
</android.support.v7.widget.Toolbar>

2.menu文件(title右侧图标,测试发现最多只能显示三个,如果超过三个第三个会变成更多的选项),另一种方式就是像上边那样在xml布局里写在Toolbar标签里

<?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/title_scan"    //id
android:title="@string/scan"     //title长按显示的文字
android:visible="false"        //默认全部不显示
android:icon="@mipmap/ic_scan"    //图标
app:showAsAction="ifRoom"/>
<!--添加-->
<item android:id="@+id/title_add"
android:title="@string/add"
android:icon="@mipmap/ic_add"
app:showAsAction="ifRoom"/>
<!--设置-->
<item android:id="@+id/title_setting"
android:title="@string/setting"
android:visible="false"
android:icon="@mipmap/ic_setting"
app:showAsAction="ifRoom"/>
<!--搜索-->
<item android:id="@+id/title_search"
android:title="@string/search"
android:visible="false"
android:icon="@mipmap/ic_search"
app:showAsAction="ifRoom"/>
<!--日期-->
<item android:id="@+id/title_date"
android:title="@string/date"
android:visible="false"
android:icon="@mipmap/ic_calendar"
app:showAsAction="ifRoom"/>
<!--刷新-->
<item android:id="@+id/title_refresh"
android:title="@string/refresh"
android:visible="false"
android:icon="@mipmap/botton_refresh"
app:showAsAction="ifRoom"/>
<!--<item android:id="@+id/title_more1"-->
<!--android:title="@string/right2"-->
<!--app:showAsAction="never"/>-->
<!--<item android:id="@+id/title_more2"-->
<!--android:title="@string/right2"-->
<!--app:showAsAction="never"/>-->
</menu>
只有android:title没有icon则直接显示文字

改变文字颜色,修改style.xml文件(theme)

<item name="actionMenuTextColor">#ffffff</item>

3.BaseActivity

/**
* Created by Administrator on 2016/9/5 0005.
*/ public class BaseActivity extends AppCompatActivity implements View.OnClickListener, Toolbar.OnMenuItemClickListener {
/*Toolbar*/
private Toolbar toolBar;
/**/
private CoordinatorLayout coordinatorLayout;
/*是否第一次加载图标(主要针对首页一对多fragment)*/
private boolean title_menu_first = true;
/*是否第一次加载返回*/
private boolean title_back_first = true;
/*是否是返回(有可能是代表别的功能)*/
private boolean is_title_back = true;
/*返回*/
private ImageView titleBack;
/*标题名称*/
private TextView titleName;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setRootView();
// coordinatorLayout = getView(R.id.coordinatorLayout);
initToolbar();
initWidght();
}
protected void setRootView(){}
protected void initWidght(){};
//
protected <T extends View>T getView(int resourcesId){
return (T) findViewById(resourcesId);
}/*初始化toolbar*/
private void initToolbar(){
toolBar = getView(R.id.toolbar);
toolBar.setTitle("");
toolBar.setTitleTextColor(Color.WHITE);
titleName = getView(R.id.title_name);
// setSupportActionBar(toolBar);
}
/**
* 设置返回
* @param back :是否返回:是-->返回,不是则设置其他图标
* @param resourcesId :图标id,返回时随意设置,不使用
* */
protected void setTitleBack(final boolean back,int resourcesId){
is_title_back = back;
if (title_back_first || titleBack == null){
titleBack= getView(R.id.title_back);
titleBack.setOnClickListener(this);
title_back_first = false;
}
titleBack.setVisibility(View.VISIBLE);
if (!back){
titleBack.setImageResource(resourcesId);
}
}
/**
* 设置title
* @param title :title
* */
protected void setTitleName(String title){
titleName.setText(title);
}
/**
* title右侧:图标类
* */
protected void setRightRes(){
//扩展menu
toolBar.inflateMenu(R.menu.base_toolbar_menu);
//添加监听
toolBar.setOnMenuItemClickListener(this);
}
/**
* 显示title图标
* @param itemId :itemId :图标对应的选项id(1个到3个),最多显示3两个
* */
protected void showTitleRes(int... itemId){
if (title_menu_first){
setRightRes();
title_menu_first = false;
}
for (int item:itemId){
//显示
toolBar.getMenu().findItem(item).setVisible(true);//通过id查找,也可以用setIcon()设置图标
// toolBar.getMenu().getItem(0).setVisible(true);//通过位置查找
}
}
/**
* 隐藏title图标
* @param itemId :图标对应的选项id
* */
protected void goneTitleRes(int... itemId){
if (titleBack != null)
titleBack.setVisibility(View.GONE);
for (int item:itemId){
//隐藏
toolBar.getMenu().findItem(item).setVisible(false);
}
}
/**
* title右侧文字
* @param str :文字内容
* */
protected void setTitleRightText(String str){
TextView textView = getView(R.id.title_rightTv);
textView.setVisibility(View.VISIBLE);
textView.setText(str);
textView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.title_back && is_title_back){
onBackPressed();
}
}
//toolbar菜单监听
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
}

3.Activity使用

public class MainActivity extends BaseActivity{
@Override
protected void setRootView() {
super.setRootView();
setContentView(R.layout.activity_main);
}
@Override
protected void initWidght() {
super.initWidght();
setTitleName(getResources().getString(R.string.chat));//title
// setTitleBack(false,R.mipmap.ic_search);//有图标,但不是返回
//setTitleBack(true,0);//返回
// setTitleRightText("保存");//右侧文字
showTitleRes(R.id.title_add,R.id.title.setting);//扩展menu(图标)
//goneTitleRes(R.id.title_add);隐藏图标,一般用不到
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.title_back){
workFragment.titleSearch();
}
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.title_add://添加
break;
case R.id.title_apps://应用break;
case R.id.title_setting://设置
break;
}
return super.onMenuItemClick(item);
}
}

Toolbar其他设置

1.去掉左边空白,在style文件里设置

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorAppTheme</item>
<item name="colorPrimaryDark">@color/colorAppTheme</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="toolbarStyle" tools:ignore="NewApi">@style/MyToolBar</item>
</style>
<style name="MyToolBar" parent="Widget.AppCompat.Toolbar">
<!--左边边距-->
<item name="contentInsetStart">0dp</item>
</style>

Android 自定义ToolBar详细使用的更多相关文章

  1. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

  2. 自定义ToolBar

    一.Toolbar的简介 Toolbar 是 android 5.0 引入的一个新控件,Toolbar出现之前,我们很多时候都是使用ActionBar以及ActionActivity实现顶部导航栏的, ...

  3. Android 之 ToolBar 踩坑笔记

    写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...

  4. Android自定义View4——统计图View

    1.介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给出一张慕课网的图,和 ...

  5. (转)[原] Android 自定义View 密码框 例子

    遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...

  6. Android 自定义ListView

    本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView. 系统显示列表(L ...

  7. Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...

  8. Android 自定义View及其在布局文件中的使用示例(二)

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3530213.html From crash_coder linguowu linguowu0622@gami ...

  9. [原] Android 自定义View 密码框 例子

    遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...

随机推荐

  1. springmvc 格式化使用Jackjson格式化报Failed to write HTTP message

    Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Co ...

  2. api签名

    当你提交以上信息时,办公逸将发送GET请求到填写的URL,GET请求将携带四个参数, 参数 描述 是否必带 signature 办公逸签名,signature结合了企业填写的token,请求中的tim ...

  3. iOS and JAVA 的 RSA 加密解密 (转载整理 )

    参考原文地址:http://www.cnblogs.com/makemelike/articles/3802518.html (至于RSA的基本原理,大家可以看 阮一峰的网络日志 的 RSA算法原理( ...

  4. 在Ubuntu下安装ISE并给Atlys板子编程

    参考 http://blog.csdn.net/rill_zhen/article/details/13770655 http://www.eefocus.com/zilion/blog/12-07/ ...

  5. linux文件及文件夹权限

    以前上学的时候简单了解了下linux,现在对它的认识也只停留在一些小白命令上.以为我只要不是做服务器端开发的应该不会去碰吧,工作了才知道做开发的多少还是要熟悉一些linux的,至少你的项目会部署在li ...

  6. gvim 安装YCM

    gvim的插件安装笔记 1.安装vunble插件 该插件主要用于管理别的插件,借助与git,从github来下载插件,实现自动安装前提条件是git安装正确,可以听过cnd使用,并且可以正确访问gith ...

  7. css负边距之详解

    自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...

  8. Ubuntu安装SSH服务器故障分析及解决办法(错误1:E:软件包 openssh-server 还没有可供安装的候选者,错误2:E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系)

    •    微博: 小样儿老师2015 Windows下做Linux开发需要SSH强大功能的支持.安装SSH的过程会出现了很多问题,看完这篇文章可以让你少走些弯路,PS:折腾一下午的成果. Ubuntu ...

  9. [原创]webapp/css3实战,制作一个《炉石传说》宣传页

    在移动网页,尤其是webapp中常需要用到大量的css3动画,来获得良好交互体验 我之前帮朋友做了一个,可惜没帮上忙现在和大家分享一下 目标是要做一个<炉石传说>游戏的介绍宣传页面,文字内 ...

  10. Mongodb命令集合

    一.数据库常用命令 1.Help查看命令提示 复制代码代码如下: help db.help(); db.yourColl.help(); db.youColl.find().help(); rs.he ...