È passato un po 'di tempo dall'ultima volta che me l'hai chiesto, ma ho avuto lo stesso problema. Come già accennato da Estel, il problema con gli ascoltatori chiave è che funzionano solo con tastiere hardware. Per farlo con un IME (tastiera morbida) , la soluzione è un po 'più elaborata.
L'unico metodo che in realtà desidera ignorare è sendKeyEvent
la EditText
's InputConnection
di classe. Questo metodo viene chiamato quando si verificano eventi chiave in un IME. Ma per sovrascrivere questo, dobbiamo implementare un custom EditText
che sovrascrive il onCreateInputConnection
metodo, avvolgendo l' InputConnection
oggetto predefinito in una classe proxy! : |
Sembra complicato, ma ecco l'esempio più semplice che potrei escogitare:
public class ZanyEditText extends EditText {
private Random r = new Random();
public ZanyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ZanyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ZanyEditText(Context context) {
super(context);
}
public void setRandomBackgroundColor() {
setBackgroundColor(Color.rgb(r.nextInt(256), r.nextInt(256), r
.nextInt(256)));
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new ZanyInputConnection(super.onCreateInputConnection(outAttrs),
true);
}
private class ZanyInputConnection extends InputConnectionWrapper {
public ZanyInputConnection(InputConnection target, boolean mutable) {
super(target, mutable);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
ZanyEditText.this.setRandomBackgroundColor();
// Un-comment if you wish to cancel the backspace:
// return false;
}
return super.sendKeyEvent(event);
}
}
}
La linea con la chiamata a setRandomBackgroundColor
è dove si verifica la mia azione speciale di backspace. In questo caso, cambiando il EditText
colore di sfondo di.
Se lo stai gonfiando da XML, ricorda di utilizzare il nome completo del pacchetto come tag:
<cc.buttfu.test.ZanyEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/somefield"
></cc.buttfu.test.ZanyEditText>