搜索框(SearchView)用法
SearchView是Android原生的搜索框控件,它提供了一个用户界面,可以让用户在文本框内输入文字,并允许通过看监听器监控用户输入,当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索。
SearchView属性如下:
XML属性 |
相关方法 |
说明 |
Android:IconifiedByDefault(Boolean iconified) |
setIconifiedByDefault(boolean) |
设置该搜索框默认是否自动缩小为图标 |
android:imeOptions |
setImeOptions(int) |
设置输入法搜索选项字段,默认是搜索,可以是:下一页、发送、完成等 |
android:inputType |
setInputType(int) |
设置输入类型 |
android:maxWidth |
setMaxWidth(int) |
设置最大宽度 |
android:queryHint |
setQueryHint(CharSequence) |
设置查询提示字符串 |
使用SearchView时可使用如下常用方法。
setIconifiedByDefault(Boolean iconified):设置该搜索框默认是否自动缩小为图标。
setSubmitButtonEnabled(Boolean enabled):设置是否显示搜索按钮。
setQueryHint(CharSequence hint):设置搜索框内默认显示的提示文本。
setOnQueryTextListener(SearchView.OnQueryTextListener listener):为该搜索框设置事件监听器。
如果为SearchView增加一个配套的ListView,则可以为SearchView增加自动完成功能。下面实例示范如何使用SearchView。
布局文件如下:
<?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="match_parent"
android:orientation="vertical">
<!--定义一个SearchView-->
<SearchView
android:id="@+id/searchview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!--为SearchView定义自动完成的ListView-->
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
主程序如下:
public class MainActivity extends AppCompatActivity { private String[] mStrings = new String[]{"说好不哭", "等你下课", "不爱我就拉到", "123456"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ListView listView = findViewById(R.id.listview); listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, mStrings)); //设置ListView启用过滤 listView.setTextFilterEnabled(true); SearchView searchView = findViewById(R.id.searchview); //设置该SearchView默认是否自动缩小为图标 searchView.setIconifiedByDefault(false); //设置该SearchView显示搜索按钮 searchView.setSubmitButtonEnabled(true); searchView.setQueryHint("查找"); //为该SearchView组件设置事件监听器 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { //单机搜索按钮时激发该方法 @Override public boolean onQueryTextSubmit(String query) { //实际应用中应该在该方法内执行实际查询,此处仅使用Toast显示用户输入的查询内容 Toast.makeText(MainActivity.this, "你的选择是:" + query, Toast.LENGTH_SHORT).show(); return false; } //用户输入字符时激发该方法 @Override public boolean onQueryTextChange(String newText) { //如果newText不是长度为0的字符串 if (TextUtils.isEmpty(newText)) { //清除ListView的过滤 listView.clearTextFilter(); } else { //使用用户输入的内容对ListView的列表项进行过滤 listView.setFilterText(newText); } return true; } }); } }
本例中定义了一个ListView组件用于为SearchView组件显示自动完成列表。
运行结果如下: