actionBar+SearchView实现搜索功能
来源:互联网 发布:企业数据安全方案 编辑:程序博客网 时间:2024/06/04 18:19
在项目中有使用到ActionBar和SearchView,下面做一个总结以方便以后使用。
一、搜索控件:SearchView(SDK Version >=11)
SearchView的API:http://www.cnblogs.com/over140/archive/2011/05/13/2045334.html
(一)比较重要的方法和属性:
1、setIconifiedByDefault (boolean iconified):如果为true,UI一开始是一个放大镜,点击放大镜会一个editText和一个图标;如果为false,UI直接显示editText和一个图标。
2、SearchView.OnQueryTextListener:用于监听和处理 editText中文字发生改变或者点击了提交按钮的事件。
(二)搜索功能的实现
1、通过布局文件和SearchView.OnQueryTextListener
布局文件
<?xml version="1.0" encoding="utf-8"?><SearchView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sv_searchview" android:layout_width="match_parent" android:layout_height="wrap_content" android:iconifiedByDefault="false" android:queryHint="@string/query_hint" > </SearchView>
MainActivity
getActionBar().setDisplayHomeAsUpEnabled(true);getActionBar().setDisplayShowTitleEnabled(false);getActionBar().setDisplayShowCustomEnabled(true);View view = getLayoutInflater().inflate(R.layout.custom_searchview,null);LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);getActionBar().setCustomView(view, layoutParams);searchView=(SearchView)view.findViewById(R.id.sv_searchview);searchView.setOnQueryTextListener(this);
2、searchable
步骤:
1)在res/xml/新建searchable.xml文件夹:
<?xml version="1.0" encoding="utf-8"?><searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/searchable_label" android:hint="@string/searchable_hint"> </searchable>
特别要注意的是:必须要使用如android:label="@string/searchable_label"这种方式赋值,直接在冒号里写值会导致SearchableInfo==null;
2)在菜单文件main.xml中加入
<item android:id="@+id/action_search" android:title="Search" android:orderInCategory="100" android:showAsAction="collapseActionView|ifRoom" android:icon="@android:drawable/ic_menu_search" android:actionViewClass="android.widget.SearchView" />
特别注意,android:actionViewClass="android.widget.SearchView"不要写错了,我就是将widget写错,导致获取不到SearchView
android:showAsAction="collapseActionView|ifRoom",其中collapseActionView是指折叠控件,ifRoom是指在屏幕有空间的情况下显示控件,showAsAction的其他值:
never-一直显示在更多(...)里
always-一直显示控件
withText-显示文字(默认只显示图标)
3)修改AndroidManifest.xml,新增如下代码:
<activity android:name="com.dream.actionbardemo.SearchActivity" android:label="@string/app_name" > <intent-filter > <action android:name="android.intent.action.SEARCH"/> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity>
4)MainActivity中的代码:
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);getMenuInflater().inflate(R.menu.main, menu);MenuItem searchItem=menu.findItem(R.id.action_search);SearchManager searchManager=(SearchManager)this.getSystemService(Context.SEARCH_SERVICE);SearchView searchView=(SearchView) searchItem.getActionView();if(searchView==null){showMsg("searchView is null");return true;}ComponentName cn=new ComponentName(this,SearchActivity.class);SearchableInfo info=searchManager.getSearchableInfo(cn);if(info==null){showMsg("cannot get the SearchableInfo");}searchView.setSearchableInfo(searchManager.getSearchableInfo(cn));searchQueryTextListener=new SearchQueryTextListener();searchView.setOnQueryTextListener(searchQueryTextListener);searchView.setIconifiedByDefault(false);return true;}
5)searchactivity中的代码
package com.dream.actionbardemo;import android.app.Activity;import android.app.SearchManager;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class SearchActivity extends Activity{private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_search);tv=(TextView)findViewById(R.id.tv_search_queryText);String action=getIntent().getAction();if(action.equals(Intent.ACTION_SEARCH)){String queryString=getIntent().getStringExtra(SearchManager.QUERY);tv.setText(tv.getText()+queryString);}}}
具体代码见:http://download.csdn.net/detail/annieliu502/8062985
对于搜索,可以使用searchview,也可以使用自定义控件,自定义控件可以实现更多效果。可以通过actionBar.setCustomView(); 来将自定义控件显示在ActionBar中。
二、ActionBar
ActionBar 是android 3.0之后出现的带有导航功能的标题栏;
csdn上一位大牛有一篇非常详细的文章介绍:http://blog.csdn.net/xyz_lmn/article/details/8132420
我就简单记录下我在开发过程中遇到的问题希望以后不要再重复错误。
1、标题栏不出现的问题或者getActionBar为null:有些application的主题是不会显示标题栏的,所以要改一下主题,设置为,比如:
android:theme="@android:style/Theme.Holo"
等能显示标题栏的主题
三、参考资料
Android UI开发第二十四篇——Action Bar: http://blog.csdn.net/xyz_lmn/article/details/8132420
Android UI开发详解之ActionBar:http://www.open-open.com/lib/view/open1373981182669.html
- actionBar+SearchView实现搜索功能
- android actionbar searchview搜索提示
- android actionbar searchview搜索提示
- 【ActionBar】搜索功能的实现
- SearchView+RecyclerView+GreenDao的搜索功能实现(1)
- SearchView+RecyclerView+GreenDao的搜索功能实现(2)
- Android SearchView 实现一边输入一边搜索功能
- SearchView+RecyclerView+GreenDao的搜索功能实现(2)
- SearchView和listview实现搜索
- ActionBar的搜索功能
- 基于Android ActionBar的SearchView实时搜索结果
- ActionBar上添加搜索功能
- ActionBar结合SearchView用SearchManager实现系统应用收索
- 搜索SearchView
- SearchView---搜索
- Android searchView和listview实现搜索
- Android searchView和listview实现搜索
- Android开发SearchView+ListView实现搜索建议
- 登陆验证
- IOS申请企业版发布证书流程
- 新房装修除甲醛都有哪些好方法
- 普元平台初始化数据库
- HDU1087_Super Jumping! Jumping! Jumping!【LIS】
- actionBar+SearchView实现搜索功能
- __bridge
- 类模板
- erlang在redhat上的安装
- 程序员需要克服的10大障碍
- tomcat启动失败
- jsp页面适应手机页面
- 树的C代码实例
- JOAL学习笔记 第六课 高级加载方式与错误处理