Android Edittext光标在关闭软键盘后仍闪烁

Android Edittext光标在关闭软键盘后仍闪烁,android,Android,在软键盘关闭后,edittext光标是否应该继续闪烁,或者这是在模拟器上测试的结果,不会在实际设备上发生?--正如《华盛顿邮报》第二篇文章所指出的那样 更新: 我知道edittext仍然有光标闪烁,因为它们仍然处于焦点位置——每当edittext失去焦点时都会记录一条消息,但当软键盘关闭时,消息从未被记录 更新: 我试过做: @Override public void onBackPressed() { super.onBackPressed(); getCurrentFocus

在软键盘关闭后,edittext光标是否应该继续闪烁,或者这是在模拟器上测试的结果,不会在实际设备上发生?--正如《华盛顿邮报》第二篇文章所指出的那样

更新: 我知道edittext仍然有光标闪烁,因为它们仍然处于焦点位置——每当edittext失去焦点时都会记录一条消息,但当软键盘关闭时,消息从未被记录

更新: 我试过做:

@Override
public void onBackPressed() {
    super.onBackPressed();
    getCurrentFocus().clearFocus();
}

因此,每当键盘关闭时,当前处于焦点的
EditText
就会失去该焦点,并调用
onFocusChanged()
。问题是当键盘打开时按下后退按钮时,不会调用
onBackPressed()
。我之所以知道这一点,是因为我在onBackPressed()中放了一个吐司,当键盘打开时按下后退按钮时,没有吐司显示。

正如您所说,
EditText
中闪烁的光标与具有焦点的
EditText
相关,但是显示或隐藏软键盘与
视图
获得或失去焦点无关。任何
视图
编辑文本
或其他)都可以独立于软键盘是否显示而聚焦,并且
编辑文本
没有任何内在特性会使其表现出任何不同


如果您想让
EditText
在软键盘隐藏时失去焦点,您需要通过监听软键盘可见性中的更改并更新
EditText
来实现此功能。

知道键盘消失的唯一方法是覆盖 打开并检查高度。
基于该事件,您可以在编辑文本上“setCursorVisible(false)”

首先创建自定义编辑文本。下面是一个示例,当按下键盘后退以关闭键盘时,会有一个回调

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;
        }
    });

这对我有用。希望这有帮助

有关更多信息,请查看此


Edittext是一个接受用户输入的视图,因此它与键盘打开或关闭无关,当用户单击Edittext时,Edittext将获得焦点,光标将开始闪烁以获取输入

所以你可以做一件事,当你同时关闭键盘时,你也可以为编辑文本设置光标的可见性,这样它就会停止闪烁

为此,当你们隐藏键盘时,你们需要写在下面的一行

    editTextObject.setCursorVisible(false);
这将使光标停止闪烁。

尝试以下操作:

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"
                />

尝试在版面中保留一个可聚焦在编辑文本上方的视图

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:focusable="true"
    android:focusableInTouchMode="true" />


这应该是因为空白可聚焦视图应该抓住焦点而不是你的编辑文本。

是的,但是我没有看到任何人窃取一个软键盘侦听器的例子,当活动的<代码> WistOffStItPoToStudio =“调整盘”< /代码>我看到……我能问为什么隐藏键盘后继续使用该活动是重要的吗?例如,在填写表单或启动搜索时,用户不会被迫在任何时间内隐藏键盘,如果他们这样做了,他们可能希望光标保持不变,这样他们就可以轻松找到最后输入信息的位置,以便找到他们离开的位置,为了让用户提交表单,他们必须点击屏幕底部的按钮,因此用户必须关闭键盘才能进入表单——当键盘打开时,按钮无法滚动到。。。当软键盘隐藏时,我是否无法清除视图上的焦点?我不确定,但我保证在填写编辑文本后通过键盘提交表单会更容易。将按钮保留在布局中,但查看TextView的IME选项,特别是setImeActionLabel()和setImeOptions()。布局中也可以使用等效的xml属性。通过这些选项,您可以直接从软键盘“单击”现有表单提交按钮。这并不是那么简单。布局底部附近的描述编辑文本是可选的,因此当用户在描述之前完成编辑文本时点击enter键时,不可能知道是否提交表单或转到描述编辑文本。这是因为当您关闭软键盘时,上一次编辑文本从未失去焦点。当您按下“完成”按钮(回车)或“后退”按钮时,您可以将
setOnKeyListener
添加到编辑文本中,并将焦点更改为其他布局组件。@JJ86我不能使用
setOnKeyListener
,因为有可选的编辑文本,因此,当用户按下“完成”按钮时,不可能知道用户是想填写下一个可选的编辑文本,还是已经全部完成。我尝试过在backpressed上重写
,但我遇到了一个问题,还没有找到解决方案,yetI-see,但是将它与
setOnFocusChangeListener
结合起来,检测哪个有焦点,哪个没有焦点呢?@JJ86除非是最后一个,否则不管哪个有焦点,在这种情况下,只需执行一个操作—提交表单。至于其他人,没有确定的方法根据是否有焦点来确定用户是否要转到下一个编辑文本或在单击Enter时提交表单。如果活动的清单中有属性android:windowSoftInputMode=“adjustPan”,则这不起作用。问题是我没有隐藏键盘,用户通过按back按钮执行此操作,但您可以实现该时间键盘隐藏功能,并且您可以如上所述设置光标可见性,这样当用户单击back按钮时,键盘将在该时间被隐藏,它将调用此功能并从编辑文本中隐藏光标。此代码如何区分back按钮被按下和其他键?这不起作用
edittext.setOnEditTextImeBackListener(new EditTextBackEvent.EditTextImeBackListener()
    {
        @Override
        public void onImeBack(EditTextBackEvent ctrl, String text)
        {
           edittext.clearfocus();
        }
    });
<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:focusable="true"
    android:focusableInTouchMode="true" />