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 sendKeyEventin dem EditText‚s - InputConnectionKlasse. Diese Methode wird aufgerufen, wenn Schlüsselereignisse in einem IME auftreten. Um dies zu überschreiben, müssen wir eine benutzerdefinierte Methode implementieren, EditTextdie die onCreateInputConnectionMethode überschreibt und das Standardobjekt InputConnectionin 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 setRandomBackgroundColorwird meine spezielle Rücktaste ausgeführt. In diesem Fall ändern Sie die EditTextHintergrundfarbe 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>