Android SearchView介绍及搜索提示实现

本文主要介绍SearchView的使用、即时搜索提示功能的实现,以及一些设置。


Android SearchView介绍及搜索提示实现

1. layout文件

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<SearchView

android:id="@+id/search_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:iconifiedByDefault="true"

android:inputType="textCapWords"

android:imeOptions="actionSearch"

android:queryHint="" />

</RelativeLayout>

xml中主要配置有四个属性,如下:

android:iconifiedByDefault表示搜索图标是否在输入框内。true效果更加
android:imeOptions设置IME options,即输入法的回车键的功能,可以是搜索、下一个、发送、完成等等。这里actionSearch表示搜索
android:inputType输入框文本类型,可控制输入法键盘样式,如numberPassword即为数字密码样式
android:queryHint输入框默认文本

2. java部分代码
SearchView几个主要函数
setOnCloseListener(SearchView.OnCloseListener listener)表示点击取消按钮listener,默认点击搜索输入框
setOnQueryTextListener(SearchView.OnQueryTextListener listener)表示输入框文字listener,包括public boolean onQueryTextSubmit(String query)开始搜索listener,public boolean onQueryTextChange(String newText)输入框内容变化listener,两个函数,下面代码包含了如何利用延迟执行实现搜索提示

Java部分实现

上面代码在onQueryTextChange函数即输入框内容每次变化时将一个数据获取线程SearchTipThread放到ScheduledExecutorService中,500ms后执行,在线程执行时判断当前输入框内容和要搜索内容,若相等则继续执行,否则直接返回,避免不必要的数据获取和多个搜索提示同时出现。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
表示默认输入法弹出

编辑框内容为空点击取消的x按钮,编辑框收缩,可在onClose中返回true

Java

1

2

3

4

5

6

7

searchView.setOnCloseListener(new OnCloseListener() {

@Override

public boolean onClose() {

return true;

}

});

searchView.onActionViewExpanded();表示在内容为空时不显示取消的x按钮,内容不为空时显示.

searchView.setSubmitButtonEnabled(true);编辑框后显示search按钮,个人建议用android:imeOptions=”actionSearch”代替。

隐藏输入法键盘

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

InputMethodManager inputMethodManager;

inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

private void hideSoftInput() {

if (inputMethodManager != null) {

View v = SearchActivity.this.getCurrentFocus();

if (v == null) {

return;

}

inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),

InputMethodManager.HIDE_NOT_ALWAYS);

searchView.clearFocus();

}

}

其中SearchActivity为Activity的类名

上一篇:viewpager实现画廊(一屏多个Fragment)效果


下一篇:Android常用代码之普通及系统权限静默安装APK