Android 下拉搜索提示框的实现

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

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


先上效果图:

Android 下拉搜索提示框的实现_第1张图片

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

    Android 下拉搜索提示框的实现_第2张图片
<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
@Override
public 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,进行相关的处理
@Override
public 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



欢迎关注我的公众号,和我一起每天进步一点点!
这里写图片描述

你可能感兴趣的:(Android)