El cursor Editext sigue parpadeando después de cerrar el teclado virtual

¿Se supone que un cursor edittext seguirá parpadeando después de que el teclado virtual esté cerrado o es un resultado de probar en un emulador y no ocurriría en un dispositivo real? – como ha señalado el segundo post de esta discusión

Actualizar:

Sé que los editerxts todavía tienen el cursor parpadeando porque todavía están enfocados – anotaron un mensaje siempre que el edittext perdió el foco, pero el mensaje nunca fue registrado cuando el teclado suave cerrado.

Actualizar:

He intentado hacer:

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

De modo que cada vez que el teclado está cerrado, el EditText actualmente en foco pierde ese enfoque y se llama onFocusChanged() . El problema es que onBackPressed() no se llama cuando se pulsa el botón de retroceso cuando el teclado está hacia arriba. Sé que esto porque puse un brindis en onBackPressed (), y no muestra tostadas cuando el botón de regreso se presiona mientras el teclado está hacia arriba.

Primero cree una Edición personalizada. A continuación se muestra el ejemplo que tiene una llamada de regreso cuando se pulsa el teclado para cerrar el teclado

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

}

En segundo lugar cambiar su EditText a EdittextListner en su archivo de diseño.

Finalmente haga lo siguiente

  mLastNameEditText.setKeyImeChangeListener(new EdittextListner.KeyImeChange() { @Override public boolean onKeyIme(int keyCode, KeyEvent event) { mLastNameEditText.clearFocus(); return true; } }); 

Esto funcionó para mí. Espero que esto ayude

Como has dicho, el cursor parpadeante en el EditText está relacionado con el EditText tiene el foco, pero mostrar u ocultar el teclado EditText no tiene correlación con una View gana o pierde foco. Cualquier View ( EditText o de otra manera) se puede enfocar independientemente de si se muestra o no un teclado EditText y no hay nada intrínseco a EditText que haría que se comporten de manera diferente.

Si desea que EditText pierda el foco siempre que el teclado EditText esté oculto, tendrá que implementar esta funcionalidad usted mismo escuchando los cambios en la visibilidad del teclado EditText y actualizando EditText como resultado.

La única manera de saber que el teclado ha desaparecido es anular OnglobalLayout y comprobar la altura. Basado en ese evento puedes "setCursorVisible (false)" en tu texto de edición

Para obtener más información, consulte este enlace .

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

Edittext es una vista que acepta la entrada del usuario, por lo que no está relacionada con keyborad abrir o cerrar, cuando el usuario haga clic en edittext, que edittext obtendrá el foco y el cursor comenzará a parpadear para la toma de entrada,

Así que usted puede hacer una cosa, como cuando se está cerrando el teclado al mismo tiempo también se puede establecer la visibilidad del cursor para que edittext por lo que se detendrá a parpadear,

Para eso debes escribir debajo de la línea cuando ocultes el teclado.

  editTextObject.setCursorVisible(false); 

Esto hará que el cursor parpadee.

prueba esto:

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

En su diseño:

 <yourpackagename.EditTextBackEvent android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Y en su fragmento:

 edittext.setOnEditTextImeBackListener(new EditTextBackEvent.EditTextImeBackListener() { @Override public void onImeBack(EditTextBackEvent ctrl, String text) { edittext.clearfocus(); } }); 

Trate de mantener una vista en su diseño que se puede enfocar encima de su editText.

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

Esto debería funcionar ya que la vista en blanco focalizable debería captar el foco y no su editado.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.