原创文章,如有转载,请注明出处: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
欢迎关注我的公众号,和我一起每天进步一点点!