关于SearchView的一些小细节

2015-12-18 15:35 962人阅读 评论(0) 收藏 举报
 分类:
Android(22) 
1.ActionBar中不显示
2.默认图标修改
3.控件的监控
其中最耗时间的就是样式的问题了,后面会详细分析一下.

一.ActionBar中不显示
有两种情况:
1.menu的中xml文件中的设置问题:
<item
        android:id="@+id/action_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_action_icon_search2"
        android:showAsAction="always"
        android:title="@string/search"/>
注意
这里需要注意android:showAsAction属性,它有五个属性值:
--------------
ifRoom,
collapseActionView,
withText,
never,
always,
--------------
这里如果你的Item不显示,不妨设置为always
然后在Activity的onPrepareOptionsMenu()方法中进行显示or隐藏的判断.
当然屏幕不够了还是会受收到overflow(三个小点)中的.
2.你在styles.xml文件中使用了自定义的ActionBar的style.
这里就需要你去判断你用了哪些属性了,这里就不深究了.
例如:
<resources>  
    <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">  
        <item name="android:actionBarStyle">@style/MyActionBar</item>  
    </style>  
    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">  
        <item name="android:background">#f4842d</item>  
    </style>
</resources>
二.SearchView的获取和设置
这是重点,网上有很多资料,这里我就总结一些我看过后还是遇到的问题.
1.获取实例与初始化绑定事件
在Activity的onCreateOptionsMenu方法中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater(); //获取Menu的Inflater
        menuInflater.inflate(R.menu.main, menu); //inflate你的Item布局
        MenuItem action_search = menu.findItem(R.id.action_search); //获取MenuItem的实例,注意,这里获取的不是SearchView的实例.
        action_search.setVisible(false); //设置Item是否可见,这里与View的设置不太一样,接受的是boolean值,只有两种状态
    searchViewInit(menu);//自定义的一个初始化SearchView的方法
        return true;
}
/**
* SearchView的初始化
*/
private void searchViewInit(Menu menu) {
        //这里需要用到SearchView的布局文件[1],文章结尾有github的链接
        //用MenuItem的`getActionView()`方法获取`android:actionViewClass`说对应的实例,这里是`android.widget.SearchView`
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setSubmitButtonEnabled(true);//是否显示确认搜索按钮
        searchView.setIconifiedByDefault(false);//设置展开后图标的样式,这里只有两种,一种图标在搜索框外,一种在搜索框内
        searchView.setIconified(false);//设置
        searchView.clearFocus();//清除焦点
        /*
        这里是重点,SearchView并没有提供样式的修改方法,所以只能
        1.用获取到的实例调用getContext()方法,返回当前view的上下文
        2.调用getResources()方法,获取该view的资源实例(Return a Resources instance)
        3.调用getIdentifier()方法,获取相同名字的ID,(Return a resource identifier for the given resource name)
        4.通过findViewById()获取该ID的实例,然后就可以做相应的操作了
        */
        int search_mag_icon_id = searchView.getContext().getResources().getIdentifier("android:id/search_mag_icon", null, null);
        ImageView  search_mag_icon = (ImageView)searchView.findViewById(search_mag_icon_id);//获取搜索图标
        search_mag_icon.setImageResource(R.drawable.ic_action_icon_search2);//图标都是用src的
        
        //设置提示文字的颜色,这里走了点奇招,用Html类方法
        searchView.setQueryHint(Html.fromHtml("<font color = #999999>" + getResources().getString(R.string.search_input) + "</font>"));
        
        //设置搜索事件的监控
        searchView.setOnQueryTextListener(new OnQueryTextListener() {
               
                @Override
                public boolean onQueryTextSubmit(String query) {
                        //当点击搜索按钮,输入法搜索按钮,会触发这个方法.在这里做相应的搜索事件,query为用户输入的值
                        //当输入框为空或者""时,此方法没有被调用
                        return true;
                }
                @Override
                public boolean onQueryTextChange(String newText) {
                        //当输入的文字发生变化的时候,会触发这个方法.在这里做匹配提示的操作等
                        return true;
                }
        });
        //如果希望SearchView一直处理展开状态,可以实现它的OnCloseListener方法
        //返回true,截取关闭事件,不让搜索框收起来
        searchView.setOnCloseListener(new OnCloseListener() {
               
                @Override
                public boolean onClose() {
                        return true;
                }
        });
}
三.SearchView样式的修改
这是我最头疼的地方,我想修改item中的这个图标

在XML中设置icon并不能修改SearchView的搜索图标:
<item
    android:id="@+id/action_search"
    android:actionViewClass="android.widget.SearchView"
    android:icon="@drawable/ic_action_icon_search2"
    android:showAsAction="always"
    android:title="@string/search"/>

关于SearchView的一些小细节相关推荐

  1. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  2. mysql被拖垮_说几个拖垮系统的小细节!

    本文首发于个人微信公众号<andyqian>,期待你的关注! 前言 有好几天没有更新了,期间确实比较忙些,以至于周末也没休息.在这期间,感触还是蛮深的.现在碎片化的想法等整理好后,再以文章 ...

  3. final关键字的这8个小细节,你get到几个?

    前言 大家好,我是狂聊君. 今天来聊 final 关键字,因为最近在看的几本书都讲到了 final 关键字,发现好多小细节自己都忽视了,抽空总结了一下,分享给大家. 正文 final关键字是一个常用的 ...

  4. 网站优化有什么值得注意的小细节吗?

    网站优化的目的就是让网站关键词达到首页,从而为网站带来更多的流量,促使网站达到更好的营销效果,那么对于关键词上首页有什么技巧,需要完善哪些细节呢?下面就跟大家一起分享一下. 一.挖掘更精准的关键词 对 ...

  5. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  6. 学长的求职经验 记录【就业创业信息网、求职流程、求职小细节】

    目录 1.就业创业信息网 2.求职流程 3.求职小细节 4.毕业设计 1.就业创业信息网 郑州轻工业大学 就业创业信息网:http://job.zzuli.edu.cn/   郑州大学 就业创业信息网 ...

  7. Linux小细节-1

    Linux小细节 1.启动过程 系统启动-内核自检-linux对应程序-加载/ext/rc.local-用户密码-系统配置文件 注:shell无法实现对没有驱动的硬件控制,需要用C语言为硬件写驱动也可 ...

  8. Swift里计数相关的小细节

    Swift里对于字符串这些引入了index型,相对其他语言而言字符操作更安全了,但是问题就是一不注意搞错范围就会有各种离奇的bug. 在讲主题前,先说个小细节. Swift里非常严密的定义了一大堆字符 ...

  9. 学习Java,容易被你忽略的小细节(2)

    昨天心情真的太糟糕了,写完<学习Java,值得注意你注意的问题(1)>之后,迎来些许的支持以后就是一片片的谴责.我的主页上涌现出许许多多Java方面的牛人,谴责我水平太低,写的问题太初级. ...

最新文章

  1. linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改
  2. Waymo自动驾驶汽车扎堆冲进死胡同,一天多达50辆,附近居民蚌埠住了
  3. Qt学习之路_1(安装及首次体验)
  4. MPI 集合通信函数 MPI_Reduce(),MPI_Allreduce(),MPI_Bcast(),MPI_Scatter(),MPI_Gather(),MPI_Allgather(),MPI_S
  5. 2016年5月29日周总结
  6. java加快内存回收_java内存管理之垃圾回收及JVM调优
  7. SAP UI5 datajs.js response handling
  8. linux中使用Vsftpd+nginx 搭建文件服务器
  9. mycat是什么_MyCat
  10. L2-028 秀恩爱分得快
  11. SharePoint 2013 对象模型操作网站设置菜单
  12. 蒲公英wifi怎么卸载干净_如何卸载蒲公英wifi
  13. switch错误码2016-0247 无法识别SD卡解决方案(猴子也能看懂的简单命令行操作,无需格式化!)
  14. EYOUCMS常用标签(官方很慢找的一些,持续更新,建议收藏)
  15. 教程丨GIS制图教程01
  16. java基础复习——day18(Stream流 ; 反射)
  17. 《前端》localStorage 和 sessionStorage-将数据存入(取出)缓存的方法-2020年10月6日
  18. C# 国际化问题之CultureInfo(小数点的不同一些欧洲国家习惯使用,而非.)
  19. 千克转换为磅并显示(小练习)
  20. ajax的blur调用,jQuery事件blur()方法的使用实例讲解

热门文章

  1. 普通路由器和聚合路由器的区别
  2. springboot 相同类名但不同包,报错non-compatible bean definition of same name and class
  3. 从零开始的MSP430单片机学习(一)
  4. WiFi大师专业版SAAS小程序+强强联合2.0模式正式开启
  5. 爱普生Epson SureColor T5480 打印机驱动
  6. Label 相关论文汇总
  7. java国际化转换_java 实现国际化 中英文语言切换
  8. Photoshop去除图片水印
  9. Diagnostic Viewer 显示空白
  10. mysql判断纯数字_MYSQL中判断字符串是否为纯数字