#Material Design之Toolbar使用

1.简介

  • 简单点可以理解为替代原来的ActionBar就行了


    Paste_Image.png

    一个Toolbar从左到右包括了一个navigation button、一个logo、一个title和subtitle、一个或多个自定义的View和一个action menu这五部分。只有设置相应的内容才行,否则不会显示。


    Paste_Image.png

2.Toolbar的使用

注意:开头是自定义命名空间xmlns:toolbar="http://schemas.android.com/apk/res-auto

  • toolbar:navigationIcon 设置navigation button的图标
  • toolbar:logo 设置logo
  • toolbar:title 设置标题
  • toolbar:titleTextColor 设置标题文字颜色
  • toolbar:subtitle 设置副标题
  • toolbar subtitleTextColor 设置副标题文字颜色
  • toolbar:popupTheme 应用一个主题用来控制toolbar的ui弹窗
  • toolbar:title TextAppearance 设置title text 相关属性,如:字体,颜色,大小等等
  • toolbar:subtitle TextAppearance
  • toolbar:logoDescription logo描述
  • anderoid:background toolbar背景
  • android:theme 主题
//设置NavigationIcon
        toolbar.setNavigationIcon(R.drawable.ic_book_list);
        // 设置navigation button 点击事件
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        // 设置 toolbar 背景色
        toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
        // 设置 Title
        toolbar.setTitle(R.string.toolbar_title);
        //  设置Toolbar title文字颜色
        toolbar.setTitleTextColor(getResources().getColor(R.color.white));
        // 设置Toolbar subTitle
        toolbar.setSubtitle(R.string.sub_title);

        toolbar.setSubtitleTextColor(getResources().getColor(R.color.white));
        // 设置logo
        toolbar.setLogo(R.mipmap.ic_launcher);
        // 设置 NavigationIcon 点击事件
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        //设置 Toolbar menu
        toolbar.inflateMenu(R.menu.setting_menu);
        // 设置溢出菜单的图标
        toolbar.setOverflowIcon(getResources().getDrawable(R.drawable.abc_ic_menu_moreoverflow_mtrl_alpha));
        // 设置menu item 点击事件
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.item_setting:
                        //点击设置
                        break;
                }
                return false;
            }
        });

如何为一个Activity添加一个ToolBar
1.gradle中添加V7 appCompat
2.确保Activity集成AppCompatActivity
3.在功能清单文件中设置(也可以在activity的节点下设置)
<application android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
4.添加

<android.support.v7.widget.Toolbar
      android:id="@+id/tool_bar_2"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@color/colorPrimary"
      toolbar:navigationIcon="@drawable/ic_book_list"
      toolbar:title="@string/toolbar_title"
      toolbar:titleTextColor="@color/white"
      toolbar:theme="@style/ToolbarTheme"
      toolbar:popupTheme="@style/ThemeOverlay.AppCompat.Light"
      >
  </android.support.v7.widget.Toolbar>

5.Actiavity中对toolbar做相关操作

private void initToolbar(){
       Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar_2);
       toolbar.setNavigationOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               finish();
           }
       });
       //添加溢出菜单
       toolbar.inflateMenu(R.menu.setting_menu);
       // 添加菜单点击事件
       toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
           @Override
           public boolean onMenuItemClick(MenuItem item) {
               switch (item.getItemId()){
                   case R.id.item_setting:
                       //点击设置菜单
                       break;
               }
               return false;
           }
       }); 

    }

溢出菜单如下

<?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/item_collect"
           android:icon="@drawable/ic_favorite_more"
           android:title="收藏"
           app:showAsAction="ifRoom"
        />

   <item android:id="@+id/item_setting"
         android:title="设置选项"
         app:showAsAction="never"
         />
    <item android:id="@+id/item_model"
          android:title="夜间模式"
          app:showAsAction="never"
        />
</menu>

app:showAsAction属性值介绍

  • ifRoom:有显示空间就显示,没有就在溢出菜单中显示
  • never:总是在溢出菜单中
  • always:总是显示在ToolBar上。

3.特殊需求

  • 修改溢出菜单文字的大小和颜色
<style name="ToolbarTheme" parent="Theme.AppCompat.Light">
        <!-- 设置 toolbar 溢出菜单的文字的颜色 -->
      <item name="android:textColor">@android:color/holo_red_dark</item> 
<!-- 设置toolbar 溢出菜单的字体大小-->
  <item name="android:textSize">25sp</item>
 <!-- 设置 显示在toobar上菜单文字的颜色 -->
 <item name="actionMenuTextColor">@android:color/white</item>
    </style>

<style name="OverFlowIcon" parent="Widget.AppCompat.ActionButton.Overflow">
        <item name="android:src">@drawable/abc_ic_menu_moreoverflow_mtrl_alpha</item>
    </style>
  • Toolbar设置自定义View
<android.support.v7.widget.Toolbar
      android:id="@+id/tool_bar_4"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@color/colorPrimary"
      android:visibility="gone"
      toolbar:navigationIcon="@mipmap/navigation_back_white"
      toolbar:theme="@style/ToolbarTheme"
      >
      <!-- ToolBar 中添加一个 编辑框 -->
      <EditText
          android:id="@+id/edit_search"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
  </android.support.v7.widget.Toolbar>

在代码中得到控件

private void initToolbar(){
        mToolbar3 = (Toolbar) findViewById(R.id.tool_bar_4);
        mToolbar3.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        mToolbar3.inflateMenu(R.menu.menu_search);

        mToolbar3.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if(item.getItemId() == R.id.item_search){
                    // do search 
                }
                return false;
            }
        });
        // 获取ToolBar 上的编辑框
        EditText searchEdit = (EditText) mToolbar3.findViewById(R.id.edit_search);
        // 获取内容
        String content = searchEdit.getText().toString();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容