原创文章,如有转载,请注明出处:http://blog.csdn.net/myth13141314/article/details/61191232

项目中用到搜索,需要在用户输入搜索内容时,弹出搜索提示。上网一搜,方法很多,但都觉得麻烦,最终采用的是ListPopupWindow来实现,比较简单


先上效果图:

ListPopupWindow的使用比较简单:

  • 在需要的地方生成对象:
listPopupWindow = new ListPopupWindow(MainActivity.this);
  • 数据源可以是简单的String数组,也可以自定义Adapter;
private class SuggestArrayAdapter extends BaseAdapter {    ...    ...}listPopupWindow.setAdapter(suggestArrayAdapter);
  • 可以设置锚点,与一个控件绑在一起,比如toolbar;
listPopupWindow.setAnchorView(toolbar);
  • 高度可以定制,直接调用接口:setHeight(int height);
listPopupWindow.setHeight(AppUtil.getSreenHeight(MainActivity.this)/3);
  • 可以设置点击监听
listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {   @Override    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        listPopupWindow.dismiss();        ...    }});
  • 判断ListPopupWindow是否处于显示状态
listPopupWindow.isShowing()
  • 当然还有显示和消失
listPopupWindow.show();listPopupWindow.dismiss();

搜索的实现采用的是ToolBar结合SearchView的方法

  • 布局什么的就不说了,首先是在ToolBar的menu文件中添加SearchView

<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <item        android:id="@+id/action_search"        android:title="@string/search_search"        android:icon="@mipmap/nav_search"        app:actionViewClass="android.support.v7.widget.SearchView"        app:showAsAction="always|collapseActionView"/>menu>
  • 然后再MainActivity中初始化ToolBar的menu
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.menu_main_toolbar, menu);  //menu文件    return true;}
  • 在onPrepareOptionsMenu方法中获取searchView,进行相关的处理
@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {    final MenuItem searchMenuItem = menu.findItem(R.id.action_search);    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);    searchView.setQueryHint(getString(R.string.search_hint_text));  //设置输入前得提示文字    //设置输入内容监听    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {        @Override        public boolean onQueryTextSubmit(String query) {            //用户点击搜索        }        @Override        public boolean onQueryTextChange(String newText) {           //搜索的内容改变        }    });    return super.onPrepareOptionsMenu(menu);//监听输入内容焦点的变化searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {    @Override    public void onFocusChange(View v, boolean hasFocus) {            Log.e("searchview QueryTextFocusChange-->" + hasFocus);        }    });}

以上只是简单的介绍了SearchView的用法,详细的可以参考官网SearchView



欢迎关注我的公众号,和我一起每天进步一点点!

更多相关文章

  1. Android——DDMS简单介绍
  2. Android(安卓)Studio中的Module打包成jar和aar的方法
  3. Android(安卓)- 监视数据库的变化
  4. Android开发:自由选择TextView的文字
  5. Android中最简单有效的Fragment全局管理器(全新实现方式)
  6. android hal层 c 堆栈打印方法
  7. Android(安卓)-- Activity,Fragment切换动画。
  8. Android应用防止模拟点击,防范抢红包类似插件的方法
  9. Android(安卓)设备 USB 通用调试驱动的安装方法

随机推荐

  1. 数据库sql及索引优化
  2. [置顶] sql server中对日期字段值
  3. SQLSERVER2005调试存储过程跟函数
  4. 烂泥:Wing FTP Server与mysql数据库整合
  5. 【手撸一个ORM】第七步、SqlDataReader转
  6. Flask-SQLAlchemy 中多表链接查询(不使用
  7. 急、急、急 phpexcel导入excel到mysql出
  8. 如何用SQL语句在一个已有数据库内新建一
  9. 在SQL Server CLR中托管.NET方法
  10. microsoft sqlserver2008 R2试用期结束后