Android 如何在保持焦点的同时使用EditText onClick方法
我有一个Android 如何在保持焦点的同时使用EditText onClick方法,android,android-edittext,Android,Android Edittext,我有一个EditText,它附带了一个ListPopupWindow,其中列出了最近的搜索查询。当用户单击编辑文本时,弹出窗口应显示,然后当用户开始键入时,弹出窗口应消失 这主要是使用OnFocusChangeListener、OnTextChangedListener和OnEditorActionListener实现的。但是,如果用户单击了EditText,开始键入,然后再次单击EditText,我需要弹出窗口返回。我曾尝试使用OnClickListener而不是onfocuschangese
EditText
,它附带了一个ListPopupWindow
,其中列出了最近的搜索查询。当用户单击编辑文本时,弹出窗口应显示,然后当用户开始键入时,弹出窗口应消失
这主要是使用OnFocusChangeListener
、OnTextChangedListener
和OnEditorActionListener
实现的。但是,如果用户单击了EditText
,开始键入,然后再次单击EditText
,我需要弹出窗口返回。我曾尝试使用OnClickListener
而不是onfocuschangesetener
,但无法使用OnClickListener
显示弹出窗口
如果用户点击了EditText
,我如何才能让ListPopUpWindow
显示它是否已经有焦点?
searchBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean gainFocus) {
//onFocus
if (gainFocus) {
popUpWindow.show();
}
}
});
在用户开始在EditText字段中键入时关闭弹出窗口
searchBox.addTextChangedListener(new TextWatcher() {
@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) {
popUpWindow.dismiss();
}
});
要清除焦点,请关闭弹出窗口并执行搜索
searchBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((actionId & v.getImeOptions()) == actionId) {
if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) {
if (searchBox.getText().toString().length() == 0) return true;
searchBox.clearFocus();
popUpWindow.dismiss();
fetchResults();
Util.hideKeyboard(v);
return true;
}
}
return false;
}
});
您可以尝试用触控式监听器替换焦距更改监听器,并在发生运动事件时显示弹出窗口:
editText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if ((event.getAction() == MotionEvent.ACTION_UP) {
// Show popup here
}
return false;
}
});
我发现了问题。事实证明,我实际上并没有使用
EditText
对象,而是使用了一个名为MaterialEditText
的自定义类,该类为EditText
对象提供了一个包装器,为其提供了材质UI特性。该类将我一直使用的侦听器传递给它的EditText成员,但是,它没有为OnClickListener
或OnTouchListener
这样做,因此这些侦听器从未为EditText
对象设置。一旦我添加了将这些侦听器传递到EditText
对象的方法,我就通过保留上面列出的代码并添加以下内容解决了问题:
searchBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Show Popup
}
});
这对我不起作用。我还确保将FocusableInTouchMode设置为true。