在软键盘关闭后,edittext游标是否会继续闪烁,或者这是在模拟器上进行测试的结果,并且不会在实际设备上发生? - 正如this discussion
中的第二篇文章所指出的那样我知道edittexts仍然让光标闪烁,因为它们仍然处于焦点状态 - 每当edittext失去焦点时都会记录一条消息,但是当软键盘关闭时,消息从未被记录。
我已经尝试过:
@Override
public void onBackPressed() {
super.onBackPressed();
getCurrentFocus().clearFocus();
}
因此,每次键盘关闭时,当前焦点的EditText
都会失去焦点并调用onFocusChanged()
。问题是当键盘启动时按下后退按钮时,onBackPressed()
不会被调用。我知道这是因为我在onBackPressed()中放了一个toast,并且在键盘启动时按下后退按钮时没有toast显示。
答案 0 :(得分:1)
首先创建自定义编辑文本。下面是按下键盘后退以关闭键盘时回调的示例
public class EdittextListner extends EditText {
private KeyImeChange keyImeChangeListener;
public EdittextListner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setKeyImeChangeListener(KeyImeChange listener) {
keyImeChangeListener = listener;
}
public interface KeyImeChange {
public boolean onKeyIme(int keyCode, KeyEvent event);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyImeChangeListener != null) {
return keyImeChangeListener.onKeyIme(keyCode, event);
}
return false;
}
}
其次将您的EditText更改为布局文件中的EdittextListner。
最后执行以下操作
mLastNameEditText.setKeyImeChangeListener(new EdittextListner.KeyImeChange() {
@Override
public boolean onKeyIme(int keyCode, KeyEvent event) {
mLastNameEditText.clearFocus();
return true;
}
});
这对我有用。希望这有帮助
答案 1 :(得分:1)
Edittext是一个接受用户输入的视图,因此它与keyborad打开或关闭无关,当用户点击edittext时,edittext将获得焦点,光标将开始闪烁以进行输入,
所以你可以做一件事,就像当你关闭键盘的同时你也可以设置该edittext的光标可见性,这样它就会停止闪烁,
为此,您需要在隐藏键盘时写下以下行。
editTextObject.setCursorVisible(false);
这将使光标停止闪烁。
答案 2 :(得分:0)
正如您所说,EditText
中闪烁的光标与有焦点的EditText
相关,但显示或隐藏软键盘与View
获得或失去焦点无关。任何View
(EditText
或其他)都可以独立于是否显示软键盘,并且EditText
没有任何内在因素可以使其表现得与众不同。
如果您希望隐藏软键盘时EditText
失去焦点,则需要通过监听软键盘可见性的更改并更新EditText
来自行实现此功能
答案 3 :(得分:0)
知道键盘消失的唯一方法是覆盖 OnglobalLayout并检查高度。 基于该事件,你可以" setCursorVisible(false)"在您的编辑文本
答案 4 :(得分:0)
有关详细信息,请查看此Link。
RelativeLayout mainLayout = findViewById(R.layout.main_layout); // You must use the layout root
InputMethodManager im = (InputMethodManager) getSystemService(Service.INPUT_METHOD_SERVICE);
/*
Instantiate and pass a callback
*/
SoftKeyboard softKeyboard;
softKeyboard = new SoftKeyboard(mainLayout, im);
softKeyboard.setSoftKeyboardCallback(new SoftKeyboard.SoftKeyboardChanged()
{
@Override
public void onSoftKeyboardHide()
{
// Code here
EditText.clearFocus();
}
@Override
public void onSoftKeyboardShow()
{
// Code here
}
});
/*
Open or close the soft keyboard easily
*/
softKeyboard.openSoftKeyboard();
softKeyboard.closeSoftKeyboard();
/* Prevent memory leaks:
*/
@Override
public void onDestroy()
{
super.onDestroy();
softKeyboard.unRegisterSoftKeyboardCallback();
}
答案 5 :(得分:0)
试试这个:
public class EditTextBackEvent extends EditText {
private EditTextImeBackListener mOnImeBack;
public EditTextBackEvent(Context context) {
super(context);
}
public EditTextBackEvent(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EditTextBackEvent(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if (mOnImeBack != null) mOnImeBack.onImeBack(this, this.getText().toString());
}
return super.dispatchKeyEvent(event);
}
public void setOnEditTextImeBackListener(EditTextImeBackListener listener) {
mOnImeBack = listener;
}
public interface EditTextImeBackListener {
void onImeBack(EditTextBackEvent ctrl, String text);
}
}
布局中的:
<yourpackagename.EditTextBackEvent
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
并在你的片段中:
edittext.setOnEditTextImeBackListener(new EditTextBackEvent.EditTextImeBackListener()
{
@Override
public void onImeBack(EditTextBackEvent ctrl, String text)
{
edittext.clearfocus();
}
});
答案 6 :(得分:-1)
尝试在布局中保留一个可以在editText上方聚焦的视图。
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:focusable="true"
android:focusableInTouchMode="true" />
这应该起作用,因为空白的可聚焦视图应该捕捉焦点,而不是你的编辑文本。