因为Actionbar的扩展性比较弱,所以一般都是自定义一个titlebar,但是现在有了toolbar,完全可以解决任何头布局的显示。

简单封装后的效果是这样的:

代码:

public class MyToolbar {private Toolbar           mToolbar;private AppCompatActivity mActivity;private ActionBar         mActionBar;private RelativeLayout    rlCustom;public MyToolbar(Toolbar mToolbar, final AppCompatActivity mActivity) {this.mToolbar = mToolbar;this.mActivity = mActivity;rlCustom = (RelativeLayout) mToolbar.findViewById(R.id.rlCustom);//支持ActionBar
        mActivity.setSupportActionBar(mToolbar);mActionBar = mActivity.getSupportActionBar();mActionBar.setDisplayHomeAsUpEnabled(true);mToolbar.setNavigationOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {mActivity.finish();}});}//设置主标题
    public MyToolbar setTitle(String title) {mActionBar.setTitle(title);return MyToolbar.this;}//设置副标题
    public MyToolbar setSubTitle(String subTitle) {mActionBar.setSubtitle(subTitle);return MyToolbar.this;}public MyToolbar setTitle(int resId) {mActionBar.setTitle(resId);return MyToolbar.this;}public MyToolbar setSubTitle(int resId) {mActionBar.setSubtitle(resId);return MyToolbar.this;}//设置导航栏图标的点击监听
    public MyToolbar setNavigationOnClickListener(View.OnClickListener listener) {mToolbar.setOnClickListener(listener);return MyToolbar.this;}//设置用于工具栏导航按钮的图标
    public MyToolbar setNavigationIcon(int resId) {mToolbar.setNavigationIcon(resId);return MyToolbar.this;}// 给左上角图标的左边加上一个返回的图标
    public MyToolbar setDisplayHomeAsUpEnabled(boolean isShow) {mActionBar.setDisplayHomeAsUpEnabled(isShow);return MyToolbar.this;}//自定义toolbar的布局
    public MyToolbar setCustomView(View view) {rlCustom.removeAllViews();rlCustom.addView(view);return MyToolbar.this;}//自定义toolbar的布局
    public MyToolbar setCustomView(int resId) {View view = mActivity.getLayoutInflater().inflate(resId, null);rlCustom.removeAllViews();rlCustom.addView(view);return MyToolbar.this;}
}

BaseActivity

public abstract class BaseActivity extends AppCompatActivity {private RelativeLayout rlContent;private Toolbar        toolBar;private MyToolbar      mMyToolbar;@Override
    public void startActivity(Intent intent) {super.startActivity(intent);overridePendingTransition(R.anim.anim_in_right_left, R.anim.anim_out_right_left);}@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_base_layout);initView();View view = getLayoutInflater().inflate(getLayoutId(), null, false);rlContent.addView(view);mMyToolbar = new MyToolbar(toolBar, this);}private void initView() {rlContent = (RelativeLayout) findViewById(R.id.rlContent);toolBar = (Toolbar) findViewById(R.id.toolBar);}public abstract int getLayoutId();public MyToolbar getToolbar() {if (null == mMyToolbar) {mMyToolbar = new MyToolbar(toolBar, this);}return mMyToolbar;}@Override
    public void finish() {super.finish();overridePendingTransition(R.anim.anim_in_left_right, R.anim.anim_out_left_right);}
}

MainAncitity

public class MainActivity extends BaseActivity {private MyToolbar mMyToolbar;@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);mMyToolbar = getToolbar();mMyToolbar.setTitle("主标题").setSubTitle("副标题");}@Override
    public int getLayoutId() {return R.layout.activity_main;}@Override
    public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Override
    public boolean onOptionsItemSelected(MenuItem item) {return super.onOptionsItemSelected(item);}public void first(View view) {startActivity(new Intent(this, SecondActivity.class));}
}

SecondActivity

public class SecondActivity extends BaseActivity {private MyToolbar mMyToolbar;@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);mMyToolbar = getToolbar();mMyToolbar.setCustomView(R.layout.layout_custom_toolbar);}@Override
    public int getLayoutId() {return R.layout.activity_second;}
}

BaseActivity布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        >

        <RelativeLayout
            android:id="@+id/rlCustom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            >
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>

    <RelativeLayout
        android:id="@+id/rlContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </RelativeLayout>

</LinearLayout>

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/action_search"
          android:title="搜索"
          android:orderInCategory="80"
          android:icon="@android:drawable/ic_menu_search"
          app:showAsAction="ifRoom" />

    <item android:id="@+id/action_share"
          android:title="分享"
          android:orderInCategory="90"
          android:icon="@android:drawable/ic_menu_share"
          app:showAsAction="ifRoom" />

    <item android:id="@+id/action_settings"
          android:title="设置"
          android:orderInCategory="100"
          app:showAsAction="never"/>
</menu>
anim_in_right_left:  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0"/>
</set>
anim_out_right_left: 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="0"
        android:toXDelta="-100%p"/>
</set>
anim_in_left_right: 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="-100%p"
        android:toXDelta="0"/>
</set>
anim_out_left_right: 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="0"
        android:toXDelta="100%p"/>
</set>

Toolbar的简单使用和封装相关推荐

  1. 简单介绍 ghost封装过程

    简单介绍 ghost封装过程 图片: 描述:1 图片: 描述:2 图片: 描述:3 图片: 描述:4 图片: 描述:5 图片: 描述:8 图片: 描述:11 图片: 描述:12 图片: 描述:13 图 ...

  2. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    简单的 Helper 封装 -- RegularExpressionHelper 1 #region 2 3 using System.Text.RegularExpressions; 4 5 #en ...

  3. 非常不错的地区三级联动,js简单易懂。封装起来了(转)

    非常不错的地区三级联动,js简单易懂.封装起来了 首先需要引入area.js,然后配置并初始化插件: 例: <!-- 绑定银行卡开始 --><script src="js/ ...

  4. AD进阶操作,利用AD17自带的3Dbody绘制简单的PCB3D封装

    年后开工,在维护公司的PCB封装时,在网上找到了比较全面的3D封装,于是乎添加到库文件,却发现有一些电子元件的3D封装是没有的,经过一番度娘的查找,学习了怎么利用AD自带的3D功能绘制3D封装. 首先 ...

  5. Flutter - dio 简单二次封装

    demo 地址: https://github.com/iotjin/jh_flutter_demo Flutter Dio简单二次封装和自定义Header Flutter Dio二次封装 Flutt ...

  6. Toolbar的简单使用

    Toolbar的简单使用 前言:由于之前项目都没怎么使用toobar,今天心血来潮就写了个demo熟悉下,免得以后用到还得花时候查资料,顺便做下笔记!go... 一.简介 Toobar是5.0之后出来 ...

  7. dio设置自定义post请求_Flutter Dio简单二次封装和自定义Header

    话不多说自己看代码封装的比较简单,比较适合入门学习Dio. import 'package:dio/dio.dart'; import 'Api.dart'; /* * 封装 restful 请求 * ...

  8. js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象

    1.Factory基本写法 <!DOCTYPE html> <html lang="en"> <head>     <meta chars ...

  9. 仿照jQuery进行一些简单的框架封装(欢迎指教~)

    1 (function(window,undefined){ 2 var arr = [], 3 push = arr.push, 4 slice = arr.slice; 5 //首先要做的就是封装 ...

最新文章

  1. 隆重介绍!一款新型基于姿势的人像实例分割框架
  2. 如何修改markdown中图片的大小
  3. 关于AIX lv 4k offset问题初步了解
  4. SVN Switch
  5. 关 于 解 析 php 的 问 题
  6. Exception in thread “main“ java.io.FileNotFoundException: C:\Temp (拒绝访问。)
  7. VS各种工程文件说明
  8. linux 16.04 WIFI,手动配置 WIFI无线网络 (Ubuntu 16.04)
  9. 【ML经典书籍系列1】解读PRML
  10. java servlet面试题_JavaWeb之JSP和servlet面试题附答案
  11. python 四象限图_「四象限图」excel制作四象限图的方法图解步骤 - seo实验室
  12. 五大常用算法——动态规划算法详解及经典例题
  13. 硬件堡垒机、软件堡垒机、云堡垒机品牌怎么选?
  14. 【前端】JS----JSX知识
  15. 《装甲战》的主要原则
  16. html5病毒营销,病毒式营销的特点及成功案例
  17. 【报告分享】2020社交电商行业发展报告之消费者行为研究报告(附下载)
  18. LB集群--LVS部署
  19. 华为服务器安装esxi找不到硬盘,Vmware Esxi 6.7设置阵列卡直通后找不到存储踩坑总结...
  20. 分子偶极矩大小如何判断_分子极性大小比较方法?

热门文章

  1. Exp5 MSF基础应用 ——20164316张子遥
  2. 服务器端配置nodejs环境(使用pm2进程管理运行)
  3. tomcat 开启 https 使用apr
  4. 结对作业_core组
  5. I/O多路复用之select,poll,epoll简介
  6. 【转】打开,另存为,属性等14个javascript代码
  7. 在GitHub上删除项目后,在Android Studio上传项目依然提示project is already on github
  8. 调整Virtual Box硬盘大小
  9. 学习SpringBoot(1)入门及简单的配置
  10. 微软正式发布PowerShell Core 6.0