1.ActionBar中不显示
2.默认图标修改
3.控件的监控
其中最耗时间的就是样式的问题了,后面会详细分析一下.

一.ActionBar中不显示
有两种情况:
1.menu的中xml文件中的设置问题:
        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.
这里就需要你去判断你用了哪些属性了,这里就不深究了.
例如:
  
      
   

二.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("" + getResources().getString(R.string.search_input) + ""));
        
        //设置搜索事件的监控
        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的搜索图标:
    android:id="@+id/action_search"
    android:actionViewClass="android.widget.SearchView"
    android:icon="@drawable/ic_action_icon_search2"
    android:showAsAction="always"
    android:title="@string/search"/>

更多相关文章

  1. Android的Activity的启动流程分析
  2. Android面试题整理(百度)
  3. Android(安卓)源码解析之Adapter和AdapterView与适配器模式
  4. AsyncHttpClient的使用
  5. Android(安卓)MediaRecorder 录制视频 start failed 的原因及解
  6. Android(安卓)锁屏和黑屏的广播消息
  7. 关于android与h5互调简介
  8. ClipDrawable让开发变得更简单
  9. Android(安卓)Volley框架

随机推荐

  1. 【PHP 面向对象】面向对象(OOP)编程之魔
  2. 免费分享HTML5清新文艺个人博客文章类模
  3. 复杂性会压垮Kubernetes吗?
  4. Linkerd 2.5发布:Helm支持与符合RBAC的tap
  5. CentOS停止维护的原因:Red Hat拒绝为其投
  6. Apache Superset成为ASF顶级项目
  7. 桌面端Firefox将抛弃PWA应用
  8. Elasticsearch改协议、AWS直呼好机会
  9. 创建你的第一个Docker应用
  10. 新的开源组织成立:道德治理,人类自由大于软