android搜索Android searchView和listview实现搜索
2013-05-30 21:08
639 查看
每日一贴,今天的内容关键字为android搜索
searchView是一个为用户提供输入搜索查询和提交请求给搜索提供者的用户界面部件,显示查询提议或结果列表!本篇介绍一下将searchView加入到自定义标题栏布局中,结合listview实现搜索,首先看一下自定义布局:
1.自定义标题栏布局:custom_action_bar_layout.xml
2.主页布局:activity_main.xml :
3. MainActivity.java
运行一下:
![](http://img.blog.csdn.net/20130530152147237)
![](http://img.blog.csdn.net/20130530152228440)
以上字母匹配是通过listView的方法listView.setTextFilterEnabled(true);实现的,当真视察你会发现仅是匹配了首字母,而包含a的ddfa却没有显示出来,如何将包含输入的字符的所有项都显示出来呢?显然通过listView.setTextFilterEnabled(true);是不可能做到的,下面开始实现这个需求,通过稍微改革,通过从新刷新listview的适配器就能够实现了!!
每日一道理
整个世界,因为有了阳光,城市有了生机;细小心灵,因为有了阳光,内心有了舒畅。明媚的金黄色,树丛间小影成像在叶片上泛有的点点破碎似的金灿,海面上直射反映留有的随波浪层层翻滚的碎片,为这大自然创造了美景,惹人醉的温馨之感,浓浓暖意中夹杂着的明朗与柔情,让雨过天晴后久违阳光的心灵从新得到了滋润!
仅是修改了MainActivity.java文件:
运行一下:
![](http://img.blog.csdn.net/20130530153728552)
可以看出已经满足了自己的要求!!
下面代码中的:setSearchViewBackground(SearchView searchView)方法通过反射可以修改搜索框的背景和光标!!
文章结束给大家分享下程序员的一些笑话语录:
问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?
答:因为李艳红这种败类,所以我没女友!
---------------------------------
原创文章 By
android和搜索
---------------------------------
searchView是一个为用户提供输入搜索查询和提交请求给搜索提供者的用户界面部件,显示查询提议或结果列表!本篇介绍一下将searchView加入到自定义标题栏布局中,结合listview实现搜索,首先看一下自定义布局:
1.自定义标题栏布局:custom_action_bar_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="0dip" android:background="#565758" android:orientation="horizontal" > <!-- iconifiedByDefault="false" //false:searchview初始等于展开的,true:searchview初始等于关闭的,仅显示一个放大镜 queryHint="@string/title_search_hint" :默许显示的提示文字 以上属性都可以在代码中通过方法:setIconifiedByDefault()和setQueryHint()直接设置 --> <SearchView android:id="@+id/search_view" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="1" android:iconifiedByDefault="false" android:inputType="textFilter" android:queryHint="@string/title_search_hint" > </SearchView> </LinearLayout>
2.主页布局:activity_main.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#969696" /> </LinearLayout>
3. MainActivity.java
package com.example.searchview2; import java.util.ArrayList; import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SearchView; public class MainActivity extends Activity implements SearchView.OnQueryTextListener { ListView listView; SearchView searchView; Object[] names; ArrayAdapter<String> adapter; ArrayList<String> mAllList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initActionbar(); names = loadData(); listView = (ListView) findViewById(R.id.list); listView.setAdapter(new ArrayAdapter<Object>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, names)); listView.setTextFilterEnabled(true); searchView.setOnQueryTextListener(this); searchView.setSubmitButtonEnabled(false); } public void initActionbar() { // 自定义标题栏 getActionBar().setDisplayShowHomeEnabled(false); getActionBar().setDisplayShowTitleEnabled(false); getActionBar().setDisplayShowCustomEnabled(true); LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View mTitleView = mInflater.inflate(R.layout.custom_action_bar_layout, null); getActionBar().setCustomView( mTitleView, new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); searchView = (SearchView) mTitleView.findViewById(R.id.search_view); } public Object[] loadData() { mAllList.add("aa"); mAllList.add("ddfa"); mAllList.add("qw"); mAllList.add("sd"); mAllList.add("fd"); mAllList.add("cf"); mAllList.add("re"); return mAllList.toArray(); } @Override public boolean onQueryTextChange(String newText) { if (TextUtils.isEmpty(newText)) { // Clear the text filter. listView.clearTextFilter(); } else { // Sets the initial value for the text filter. listView.setFilterText(newText.toString()); } return false; } @Override public boolean onQueryTextSubmit(String query) { // TODO Auto-generated method stub return false; } }
运行一下:
以上字母匹配是通过listView的方法listView.setTextFilterEnabled(true);实现的,当真视察你会发现仅是匹配了首字母,而包含a的ddfa却没有显示出来,如何将包含输入的字符的所有项都显示出来呢?显然通过listView.setTextFilterEnabled(true);是不可能做到的,下面开始实现这个需求,通过稍微改革,通过从新刷新listview的适配器就能够实现了!!
每日一道理
整个世界,因为有了阳光,城市有了生机;细小心灵,因为有了阳光,内心有了舒畅。明媚的金黄色,树丛间小影成像在叶片上泛有的点点破碎似的金灿,海面上直射反映留有的随波浪层层翻滚的碎片,为这大自然创造了美景,惹人醉的温馨之感,浓浓暖意中夹杂着的明朗与柔情,让雨过天晴后久违阳光的心灵从新得到了滋润!
仅是修改了MainActivity.java文件:
package com.example.searchview2; import java.lang.reflect.Field; import java.util.ArrayList; import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SearchView; public class MainActivity extends Activity implements SearchView.OnQueryTextListener { ListView listView; SearchView searchView; Object[] names; ArrayAdapter<String> adapter; ArrayList<String> mAllList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initActionbar(); names = loadData(); listView = (ListView) findViewById(R.id.list); listView.setAdapter(new ArrayAdapter<Object>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, names)); //listView.setTextFilterEnabled(true); searchView.setOnQueryTextListener(this); searchView.setSubmitButtonEnabled(false); //SearchView去掉(修改)搜索框的背景 修改光标 //setSearchViewBackground(searchView); } public void initActionbar() { // 自定义标题栏 getActionBar().setDisplayShowHomeEnabled(false); getActionBar().setDisplayShowTitleEnabled(false); getActionBar().setDisplayShowCustomEnabled(true); LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View mTitleView = mInflater.inflate(R.layout.custom_action_bar_layout, null); getActionBar().setCustomView( mTitleView, new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); searchView = (SearchView) mTitleView.findViewById(R.id.search_view); } public Object[] loadData() { mAllList.add("aa"); mAllList.add("ddfa"); mAllList.add("qw"); mAllList.add("sd"); mAllList.add("fd"); mAllList.add("cf"); mAllList.add("re"); return mAllList.toArray(); } @Override public boolean onQueryTextChange(String newText) { Object[] obj = searchItem(newText); updateLayout(obj); return false; } @Override public boolean onQueryTextSubmit(String query) { // TODO Auto-generated method stub return false; } public Object[] searchItem(String name) { ArrayList<String> mSearchList = new ArrayList<String>(); for (int i = 0; i < mAllList.size(); i++) { int index = mAllList.get(i).indexOf(name); // 存在匹配的数据 if (index != -1) { mSearchList.add(mAllList.get(i)); } } return mSearchList.toArray(); } public void updateLayout(Object[] obj) { listView.setAdapter(new ArrayAdapter<Object>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, obj)); } // android4.0 SearchView去掉(修改)搜索框的背景 修改光标 public void setSearchViewBackground(SearchView searchView) { try { Class<?> argClass = searchView.getClass(); // 指定某个私有属性 Field ownField = argClass.getDeclaredField("mSearchPlate"); // 注意mSearchPlate的背景是stateListDrawable(不同状态不同的图片) // 所以不能用BitmapDrawable // setAccessible 它是用来设置是不是有权限拜访反射类中的私有属性的,只有设置为true时才可以拜访,默许为false ownField.setAccessible(true); View mView = (View) ownField.get(searchView); mView.setBackgroundDrawable(getResources().getDrawable( R.drawable.ic_menu_search)); // 指定某个私有属性 Field mQueryTextView = argClass.getDeclaredField("mQueryTextView"); mQueryTextView.setAccessible(true); Class<?> mTextViewClass = mQueryTextView.get(searchView).getClass() .getSuperclass().getSuperclass().getSuperclass(); // mCursorDrawableRes光标图片Id的属性 // 这个属性是TextView的属性,所以要用mQueryTextView(SearchAutoComplete)的父类(AutoCompleteTextView)的父 // 类( EditText)的父类(TextView) Field mCursorDrawableRes = mTextViewClass .getDeclaredField("mCursorDrawableRes"); // setAccessible 它是用来设置是不是有权限拜访反射类中的私有属性的,只有设置为true时才可以拜访,默许为false mCursorDrawableRes.setAccessible(true); mCursorDrawableRes.set(mQueryTextView.get(searchView), R.drawable.ic_action_search);// 注意第一个参数持有这个属性(mQueryTextView)的对象(mSearchView) // 光标必须是一张图片不能是颜色,因为光标有两张图片,一张是第一次获得核心的时候的闪烁的图片,一张是后边有内容时候的图片,如果用颜色填充的话,就会得到闪烁的那张图片,颜色填充的会收缩文字和光标的距离(某些字母会背光标覆盖一部分)。 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行一下:
可以看出已经满足了自己的要求!!
下面代码中的:setSearchViewBackground(SearchView searchView)方法通过反射可以修改搜索框的背景和光标!!
文章结束给大家分享下程序员的一些笑话语录:
问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?
答:因为李艳红这种败类,所以我没女友!
---------------------------------
原创文章 By
android和搜索
---------------------------------
相关文章推荐
- Android searchView和listview实现搜索
- Android searchView和listview实现搜索
- Android searchView和listview实现搜索
- Android searchView和listview实现搜索
- Android SearchView介绍及搜索提示实现
- Android SearchView 实现一边输入一边搜索功能
- SearchView和listview实现搜索
- 自义定数据类型SearchView+listview搜索实现
- Android客户端之“微服私访”App的系统学习(七)XRecyclerView快速实现列表界面+自定义Search输入框,软键盘搜索按钮监听+TextView部分样式改变
- 实现自定义view(2):仿Android QQ多屏幕显示ListView的效果
- Android:实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(三)具体实现
- android标题栏RadioButton实现,下面展示切换viewpager,fragment,内容是listview
- Android ListView ImageView实现单选按钮实例
- Android下利用ToolBar+SearchView实现仿微信搜索框效果
- Android学习-实现一个ListView中由Checkbox和TextView构成的布局
- actionBar+SearchView实现搜索功能
- Android Listview切换动画,扩展到任意view切换之间动画实现
- Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音