一个很常见的场景,模糊查询的时候会在输入框下面弹出一个窗体让用户进行选择,这种实现方法有很多我要说的就是使用PopupWindows的实现,以及遇到的问题。
- 首先我们会使用edittext.addTextChangedListener来进行输入监听
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//移除消息
handler.removeCallbacksAndMessages(null);
//判断输入内容,根据不同场景,有不同的实现(比如输入空查询所有)
if (!TextUtils.isEmpty(s.toString())) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
//300毫秒后没输入内容就加载窗体内容(一般进行网络请求一类的)
//显示窗体
showPop(view);
}, 300);
}
}
}
- 其次显示窗体需要的布局与内容
private void showPop(View view) {
//TODO: 显示的view
popupWindow.setContentView(view);
// TODO: 2016/5/17 设置背景颜色
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
//这一句代码至关重要,决定着弹出窗体后是否可以继续输入
popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
popupWindow.showAsDropDown(editText, 0, 0);
}