studio - Detectar descartar evento de teclado en Android
ocultar teclado android edittext (1)
Tengo un texto de edición que necesita funcionar como el campo de texto en iOS. Cuando hago clic en él, debería ser editable, de lo contrario debería estar deshabilitado. Digamos que el usuario quiere editar un cierto valor y cuando presiona el botón Atrás, junto con el teclado se descarta, quiero que el texto de edición se deshabilite para editarlo.
Todo lo que estoy usando es el método setCursorVisible (true) y setCursorVisible (falso). Intenté usar los eventos de KeyCode pero no están ayudando. Esto es lo que he intentado hasta ahora:
@Override
public void onBackPressed() {
// Had the InputMethodManager service here..
if(imm.isAcceptingText())
{
Toast.makeText(ProfileActivity.this,"working",Toast.LENGTH_SHORT).show();
}
else {
super.onBackPressed();
Toast.makeText(ProfileActivity.this,"back pressed called",Toast.LENGTH_SHORT).show();
}
}
También intentó anular el evento KeyDown.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//replaces the default ''Back'' button action
if(keyCode==KeyEvent.KEYCODE_BACK)
{
Log.d("123","called,called");
return true;
}
return super.onKeyDown(keyCode, event);
}
¿Qué tal crear una subclase de EditText y reemplazar su método onKeyPreIme?
/**
* This class overrides the onKeyPreIme method to dispatch a key event if the
* KeyEvent passed to onKeyPreIme has a key code of KeyEvent.KEYCODE_BACK.
* This allows key event listeners to detect that the soft keyboard was
* dismissed.
*
*/
public class ExtendedEditText extends EditText {
public ExtendedEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ExtendedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExtendedEditText(Context context) {
super(context);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
dispatchKeyEvent(event);
return false;
}
return super.onKeyPreIme(keyCode, event);
}
}