Android 自定义ToolBar详细使用
自定义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详细使用的更多相关文章
- 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)
本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...
- 自定义ToolBar
一.Toolbar的简介 Toolbar 是 android 5.0 引入的一个新控件,Toolbar出现之前,我们很多时候都是使用ActionBar以及ActionActivity实现顶部导航栏的, ...
- Android 之 ToolBar 踩坑笔记
写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...
- Android自定义View4——统计图View
1.介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给出一张慕课网的图,和 ...
- (转)[原] Android 自定义View 密码框 例子
遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...
- Android 自定义ListView
本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView. 系统显示列表(L ...
- Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程
转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...
- Android 自定义View及其在布局文件中的使用示例(二)
转载请注明出处 http://www.cnblogs.com/crashmaker/p/3530213.html From crash_coder linguowu linguowu0622@gami ...
- [原] Android 自定义View 密码框 例子
遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...
随机推荐
- MSSQLServer中组织或分类表的设计及其递归查询
开篇:项目中用到上下级从属关系的太多太多了,如:组织.分类.行政区域,这里不再一一介绍,遇到这种的如何去进行数据库表的设计及其应用的,个人对往期项目中所涉及到的进行了一些总结. 数据库表设计:表字段一 ...
- python之登录小程序
# 登录操作 PassWord_list = [] Reset_pw = '*#*#' def account_login(): if PassWord_list == []: PassWord = ...
- ASP.NET MVC移动M站建设-使用51Degree 移动设备的识别
上一篇,介绍了移动M站的建设.说的很简单.觉得好像也没把M站给讲清楚.估计是对移动M站 认识还不够深刻吧.这里,在讲一讲51Degree 这个组件. 51degrees 号称是目前最快.最准确的设备检 ...
- log4net位置与使用方法
<log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.Rol ...
- Xcode6新特性(1)-删除Main.storyboard
当新建完一个空项目的时候,Xcode会自动创建一个Main.storyboard的空文件,如果不需要,可以将其删除.但是如果删除,再次运行程序,程序会报错,提示找不到Main.storyboard文件 ...
- 参加SFDC的感触
今天参加了SFDC. 第一次参加这样的技术大会,感触总是有点. 简单的记录如下 1.自动化运维在行业已经成为趋势,未来DevOps 作为开发和运维统一已经是新时代对开发人员的要求.公司架构一个自己的自 ...
- JSP内置对象之request对象【学习笔记】
request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径. 一.获取请求头与 ...
- JAVA动态加载JAR
// 生成JAR包D:\TestClass.jar package hand.java.loadjar; public class TestClass { private String sayHell ...
- Linux下安装tensorflow
- .Net Framework认知
在托管代码的世界里,应用程序首先被加载到应用程序域(AppDomain)中,然后将应用程序域加载到进程中,一个进程可以包含多个应用程序域,也就是说一个进程可以包含多个应用程序,毕竟应用程序域之间的切换 ...