Es ist schon eine Weile her, seit du gefragt hast, aber ich hatte nur das gleiche Problem. Wie bereits von Estel erwähnt, besteht das Problem bei Key Listenern darin, dass sie nur mit Hardwaretastaturen funktionieren. Um dies mit einer IME (Soft Keyboard) zu tun , ist die Lösung etwas ausgefeilter.
Die einzige Methode , die wir wirklich wollen , außer Kraft zu setzen ist sendKeyEvent
in dem EditText
‚s - InputConnection
Klasse. Diese Methode wird aufgerufen, wenn Schlüsselereignisse in einem IME auftreten. Um dies zu überschreiben, müssen wir eine benutzerdefinierte Methode implementieren, EditText
die die onCreateInputConnection
Methode überschreibt und das Standardobjekt InputConnection
in eine Proxy-Klasse einschließt! : |
Klingt kompliziert, aber hier ist das einfachste Beispiel, das ich erfinden könnte:
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);
}
}
}
In der Zeile mit dem Aufruf von setRandomBackgroundColor
wird meine spezielle Rücktaste ausgeführt. In diesem Fall ändern Sie die EditText
Hintergrundfarbe des.
Wenn Sie dies aus XML aufblasen, denken Sie daran, den vollständigen Paketnamen als Tag zu verwenden:
<cc.buttfu.test.ZanyEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/somefield"
></cc.buttfu.test.ZanyEditText>