Android 下拉搜索提示框的实现

原创文章,如有转载,请注明出处: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
@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



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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值