ToolBar和SearchView的使用总结

众所周知,在使用ActionBar的时候,一堆的问题:这个文字能不能定制,位置能不能改变,图标的间距怎么控制神马的,由此暴露出了ActionBar设计的不灵活。为此官方提供了ToolBar,并且提供了supprot library用于向下兼容。Toolbar之所以灵活,是因为它其实就是一个ViewGroup,我们在使用的时候和普通的组件一样,在布局文件中声明。

Part1:ToolBar的引入

step1:设置style主题,主要任务是去除原本的ActionBar

<span style="font-size:14px;">   <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"><!--Light.DarkActionBar表示默认的黑色主体的Actionbar-->
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/sky_blue</item>
        <item name="colorPrimaryDark">@color/deep_blue</item>
        <item name="colorAccent">@color/material_deep_teal_200</item>
        <item name="android:textColorPrimary">@color/white</item>
    </style></span>

colorPrimary表示标题栏ActionBar的颜色;
    colorPrimaryDark表示状态栏的颜色;   colorAccent表示输入框,按钮等被选中时的颜色;  textColorPrimary表示标题栏(ActionBar或者ToolBar)中字体的颜色

当然啦,第一步的实现也可以在程序代码中或者style里静态或者动态地去掉ActionBar

step2:在你需要引入ToolBar的布局文件中引入ToolBar:

 <android.support.v7.widget.Toolbar
        android:id="@+id/main_toolbar"
        android:theme="@style/ThemeOverlay.AppCompat.Dark"//这里的主题可以用来反衬toolBar的overFlow颜色
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/sky_blue"
        ></android.support.v7.widget.Toolbar>

因为colorPrimary是给ActionBar设定颜色的,因此如果我们使用ToolBar,就需要自己去设定ToolBar的背景颜色

setp3:在代码中获取ToolBar控件以及实例化:

       Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar);
       toolbar.setNavigationIcon(R.mipmap.ic_toc_white_24dp);//设置ToolBar头部图标
       toolbar.setTitle("ToolBar");//设置标题,也可以在xml中静态实现
       setSupportActionBar(toolbar);//使活动支持ToolBar

Part2:ToolBar里各SearchView的引入:

setp1: 在menu/xxxx.xml的菜单布局文件将SearchView以菜单条目的方式加入到ToolBar中

<span style="white-space:pre">	</span><item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView"
        android:inputType="textCapWords"
        android:imeOptions="actionSearch"
        android:title="search" />

这中添加条目的方式和添加普通控件的方式是一样的,这里需要对showAsAction具体说明以下:

ifRoom表示当toolBar空间足够时,显示图标在标题栏中,否则将它隐藏到ToolBar末端的overFlow中,点开overFlow只显示item的title

CollapseActionView表示当前空间点开之后占据整个ToolBar空间

always表示总是显示在标题栏中,当我们长按该item后,就会以Toast的方式显示出它的title

never表示总是隐藏在overFlow中

step2:在Java程序代码中实例SearchView

覆写onCreateOptionsMenu方法,为什么要在这个方法里实现对SearchView的实例化呢?因为toolBar里的点击事件都以菜单的形式实现的,如果我们需要让它隐藏到overFlow中,并且点击菜单键并唤出,那么就只需要把它的显示方式设置为never即可。

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        MenuItem menuItem = menu.findItem(R.id.action_search);//在菜单中找到对应控件的item
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
        Log.d("Tag", "menu create");
        MenuItemCompat.setOnActionExpandListener(menuItem, new MenuItemCompat.OnActionExpandListener() {//设置打开关闭动作监听
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                Toast.makeText(MainActivity.this, "onExpand", Toast.LENGTH_LONG).show();
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                Toast.makeText(MainActivity.this, "Collapse", Toast.LENGTH_LONG).show();
                return true;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }
时间: 2024-10-07 00:55:23

ToolBar和SearchView的使用总结的相关文章

Android开发笔记(一百一十九)工具栏ToolBar

Toolbar 在前面的博文<Android开发笔记(二十)顶部导航栏>中,我们学习了ActionBar的用法,可是ActionBar着实是不怎么好用,比如文字风格不能定制.图标不能定制,而且还存在低版本的兼容性问题,所以实际开发中大家还是不倾向使用ActionBar.为此,Android提供了加强版的工具栏控件即Toolbar,因为Toolbar继承自ViewGroup,而且可在布局文件中像其它布局视图一样使用,所以灵活性大大的提高了.既然Android都与时俱进了,那我们也不能落后,现在就

Android开发之Theme、Style探索及源码浅析

1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解整个Android中Theme.Style的关系及结构,这样我们就能游刃有余的面对实际开发中遇到的很多问题了,也就免得在自定义时遇到各种坑,譬如不清楚该继承哪个parent.不清楚为何背景会有一个黑边等. 本文主要分两部分来进行简单粗略的浅析,首先会围绕Theme与Style的定义及在App开发中的

【转】Android开发笔记(序)写在前面的目录

原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入门上:其次是想拾缺补漏,写写虽然小众却又用得着的东西:另外就是想以实用为主,不求大而全,但求小而精:还有就是有的知识点是java的,只是Android开发也会经常遇上,所以蛮记下来.个人的经

Toolbar的使用

? 项目来源: https://github.com/xuwj/ToolbarDemo#userconsent# ? 一.V7包升级问题 ? 折腾好久,终于解决 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 的错误问题... ? ? 解决策略:FQ,然后在sdkManager里面下载最新的support包,一定要是最新的. 然后引入到工程中来. ? ? 结构如下: 还

Android常用UI之Toolbar

转载请注明出处:http://blog.csdn.net/h_zhang/article/details/51232773 Android3.0之后引入了ActionBar控件,但是由于ActionBar操作的诸多不便,并且官方也在一定程度上承认ActionBar限制了android app设计与开发的弹性.所以google官方建议使用Toolbar代替ActionBar,Toolbar比ActionBar使用起来更加灵活.而在material design中也对其做了名称的定义:app bar

android 5.X Toolbar+DrawerLayout实现抽屉菜单

前言 ?android5.X新增的一个控件Toolbar,这个控件比ActionBar更加自由,可控,因为曾经的ActionBar的灵活性比較差,所以google逐渐使用Toolbar替代ActionBar,所以Toolbar也能够说是超级ActionBar. 这篇文章不具体介绍ToolBar的使用(定制),主要是介绍Toolbar使用的一个样例.即Toolbar结合DrawerLayout实现抽屉菜单. 使用这个两个控件须要引入对应的库依赖: dependencies { compile fi

Android Material Design之Toolbar与Palette

转:http://blog.csdn.net/jdsjlzx/article/details/41441083 前言 我们都知道Marterial Design是Google推出的全新UI设计规范,如果对其不太了解的可以看下:Material design非官方中文指导手册 ,或者我的前面几篇Material Design的译文,相比之前Google在Android Holo风格上平平淡淡的表现不同,Material Design现在是被Google所比较重视的.在推出这门全新设计语言后,And

自定义 SearchView

效果: 代码: SearchActivity.java package com.jialianjia.bzw.activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.annotation.SuppressLint; import android.widget.ListView; import android.widget.SearchView; import com.jialia

Toolbar的使用.md

1.什么是Toolbar Toolbar是在Android5.0时出现的一个新控件,其目的用于取代Actionbar,它与Actionbar最大的差别就是Toolbar使用更加灵活.自由,而且Toolbar遵循Material Design规范. 想要使用Toolbar必须引用appcompat-v7库.当然另一种方法.就是将API改动为21以上,这样的方法的Toolbar不支持API21下面的系统,所以用的不多. 2.Toolbar的使用 2.1 加入V7支持库 这里使用appcompat-v