SearchView的用法
来源:互联网 发布:支付宝解除淘宝绑定 编辑:程序博客网 时间:2024/05/24 01:21
SearchView即时搜索提示功能,主要实现如下:layout布局:<?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输入框默认文本SearchView的几个主要函数setOnCloseListener(SearchView.OnCloseListener listener)表示点击取消按钮listener,默认点击搜索输入框setOnQueryTextListener(SearchView.OnQueryTextListener listener)表示输入框文字listener,包括public boolean onQueryTextSubmit(String query)开始搜索listener,public boolean onQueryTextChange(String newText)输入框内容变化listener,两个函数java部分实现:package cn.trinea.android.demo;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledFuture;import java.util.concurrent.TimeUnit;import android.app.ActionBar;import android.app.ActionBar.LayoutParams;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MenuItem;import android.view.View;import android.view.WindowManager;import android.widget.SearchView;import android.widget.SearchView.OnCloseListener;import android.widget.Toast;public class SearchViewDemo extends Activity { private SearchView searchView; private Context context; private MyHandler handler; // schedule executor private ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(10); private String currentSearchTip; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_view_demo); context = getApplicationContext(); handler = new MyHandler(); ActionBar actionBar = getActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_CUSTOM); setTitle(" "); LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View customActionBarView = inflater.inflate(R.layout.search_view_demo_title, null); searchView = (SearchView)customActionBarView.findViewById(R.id.search_view); searchView.setIconified(false); searchView.setOnCloseListener(new OnCloseListener() { @Override public boolean onClose() { // to avoid click x button and the edittext hidden return true; } }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { public boolean onQueryTextSubmit(String query) { Toast.makeText(context, "begin search", Toast.LENGTH_SHORT).show(); return true; } public boolean onQueryTextChange(String newText) { if (newText != null && newText.length() > 0) { currentSearchTip = newText; showSearchTip(newText); } return true; } }); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT); actionBar.setCustomView(customActionBarView, params); // show keyboard getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } public void showSearchTip(String newText) { // excute after 500ms, and when excute, judge current search tip and newText schedule(new SearchTipThread(newText), 500); } class SearchTipThread implements Runnable { String newText; public SearchTipThread(String newText){ this.newText = newText; } public void run() { // keep only one thread to load current search tip, u can get data from network here if (newText != null && newText.equals(currentSearchTip)) { handler.sendMessage(handler.obtainMessage(1, newText + " search tip")); } } } public ScheduledFuture<?> schedule(Runnable command, long delayTimeMills) { return scheduledExecutor.schedule(command, delayTimeMills, TimeUnit.MILLISECONDS); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: { onBackPressed(); return true; } } return false; } private class MyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: Toast.makeText(context, (String)msg.obj, Toast.LENGTH_SHORT).show(); break; } } }}上面代码在onQueryTextChange函数即输入框内容每次变化时将一个数据获取线程SearchTipThread放到ScheduledExecutorService中,500ms后执行,在线程执行时判断当前输入框内容和要搜索内容,若相等则继续执行,否则直接返回,避免不必要的数据获取和多个搜索提示同时出现。 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);表示默认输入法弹出 编辑框内容为空点击取消的x按钮,编辑框收缩,可在onClose中返回trueJava1234567 searchView.setOnCloseListener(new OnCloseListener() { @Overridepublic boolean onClose() {return true;}});searchView.onActionViewExpanded();表示在内容为空时不显示取消的x按钮,内容不为空时显示.searchView.setSubmitButtonEnabled(true);编辑框后显示search按钮,个人建议用android:imeOptions=”actionSearch”代替。隐藏输入法键盘 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的类名
0 0
- SearchView的简单用法
- SearchView的用法
- 搜索控件SearchView的用法
- 搜索控件SearchView的用法
- SearchView&WebView的简单用法
- Android搜索控件SearchView的用法
- Android中SearchView的功能和用法
- SearchView的用法与源码详解
- SearchView基本功能用法
- Android中的搜索框(SearchView)的功能和用法
- Android中的搜索框(SearchView)的功能和用法
- Android SearchView设置与用法的那点事儿
- Android 搜索框:SearchView 的属性和用法详解
- Android 搜索框:SearchView 的属性和用法详解
- Android 搜索框:SearchView 的属性和用法详解
- Android SearchView的使用方法
- SearchView的基本使用
- Android SearchView的使用
- springMvc接受日期类型参数处理
- 详解PHP正则表达式
- pyhive中 一些错误的地方
- 项目总结
- Android 获取Scanresult 实例 (隐藏构造方法)
- SearchView的用法
- iOS开发-- KVO的实现原理与具体应用
- Android jdk1.8的使用配置并解决中文乱码的问题
- SpringMVC的四种HandlerMapping
- http://blog.csdn.net/wangyoujin321/article/details/51472606
- Android自定义view实践(1)
- 文章标题
- AndroidStudio项目运行当中如何给项目添加debug模式
- MQTT协议实现Eclipse Paho学习总结一