@gogogodeng
2017-08-10T05:44:14.000000Z
字数 3563
阅读 507
android控件
搜索控件
iconifiedByDefault: 表示搜索图标是否在输入框内。true效果更佳
imeOptions: 设置IME options,即输入法的回车键的功能,可以是搜索、下一个、发送、完成等等。
actionSearch表示搜索
inputType: 输入框文本类型,可控制输入法键盘样式,如numberPassword即为数字密码样式
queryHint: 输入框默认文本
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><SearchViewandroid:id="@+id/search_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:iconifiedByDefault="true"android:inputType="text"android:imeOptions="actionSearch"android:queryHint="请输入关键字" /><ListViewandroid:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>
package com.testapp.app;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.SearchView;/*** Created by develop on 2015/11/16.*/public class SearchViewActivity extends Activity {// 自动完成的列表private final String[] mStrings = { "aaaaaaa", "bbbbbbb", "ccccccc", "ddddddd", "eeeeeee", "fffffff" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.searchview);SearchView sv = (SearchView)findViewById(R.id.search_view);final ListView lv = (ListView)findViewById(R.id.list_view);lv.setTextFilterEnabled(true);lv.setAdapter(new ArrayAdapter<String>(SearchViewActivity.this, android.R.layout.simple_list_item_1, mStrings));sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {@Overridepublic boolean onQueryTextSubmit(String query) {return false;}@Overridepublic boolean onQueryTextChange(String newText) {if (TextUtils.isEmpty(newText)) {// 清除ListView的过滤lv.clearTextFilter();} else {// 使用用户输入的内容对ListView的列表项进行过滤lv.setFilterText(newText);}return false;}});}}
但是这样写只能匹配第一个字母,所以还得改一下
package com.testapp.app;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.SearchView;import java.util.ArrayList;/*** Created by develop on 2015/11/16.*/public class SearchViewActivity extends Activity {private SearchView sv;private ListView lv;// 自动完成的列表private final ArrayList<String> mAllList = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.searchview);sv = (SearchView)findViewById(R.id.search_view);lv = (ListView)findViewById(R.id.list_view);lv.setAdapter(new ArrayAdapter<Object>(SearchViewActivity.this,android.R.layout.simple_list_item_1,loadData()));sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {@Overridepublic boolean onQueryTextSubmit(String query) {return false;}@Overridepublic boolean onQueryTextChange(String newText) {if (TextUtils.isEmpty(newText)) {// 清除ListView的过滤loadData();} else {// 使用用户输入的内容对ListView的列表项进行过滤updateLayout(searchItem(newText));}return false;}});}//加载数据public Object[] loadData() {mAllList.add("aaaa");mAllList.add("ddfa");mAllList.add("qwww");mAllList.add("sder");mAllList.add("fdzc");mAllList.add("cfjh");mAllList.add("reoo");return mAllList.toArray();}//搜索数据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) {lv.setAdapter(new ArrayAdapter<Object>(SearchViewActivity.this,android.R.layout.simple_list_item_1, obj));}}
效果图
