@gogogodeng
2017-08-10T13:44:14.000000Z
字数 3563
阅读 419
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">
<SearchView
android: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="请输入关键字" />
<ListView
android: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" };
@Override
protected 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() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public 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>();
@Override
protected 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() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public 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));
}
}
效果图