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步骤 ...
随机推荐
- linux下从SVN checkout目录源码下来
需求:我们替换http请求为https协议,要查看全不全,得到源码中去检查,所以自动化扫源码查询.但是得先有源码包啊.源码包直接从SVN上checkout 1.下载 [root@v50 0.02 sr ...
- react
package.json ENOSPC 文件监控增加一些 echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf ...
- JSP多文件上传到服务器
问题描述: 作为一个Java开发Web方向的程序员,很重要的一个功能,就是上传文件功能是一定要掌握的,今天整理了一下代码. 1.JSP显示界面代码和动态添加上传文件个数. <%@ page la ...
- [asp.net core] Tag Helpers 简介(转)
原文地址 https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro What are Tag Helpers? ...
- spring MVC 尝试传参json(应用部分)
spring 3.1后增加新的注解:@Requestbody,@Responsebody, 暂不论Requestdody, 若想让后端代码直接返回json字符串,可使用@Responsebody, 用 ...
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...
- C#设置输入框只输入数字
为输入框添加keyPress事件,然后添加代码: || e.KeyChar > ) && e.KeyChar != && e.KeyChar != &&a ...
- VB中PictureBox控件使用教程
PictureBox对象可以说是任何对象的原始型态,它可以加载图片.显示文字.画图外,它还能与Frame对象一样,在自己本身里头加载其它的对象而自成一个小群组,用PictureBox可以仿真出任何对象 ...
- 部分Android手机拍照后照片被旋转的解决方案
在部分Android手机(如MT788.Note2)上,使用Camera拍照以后,得到的照片会被自动旋转(90°.180°.270°),这个情况很不符合预期.仔细分析了一下,因为照片属性中是存储了 ...
- 服务器通过微信公众号Token验证测试的代码(Python版)
我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意 ...