Минув час, коли ви запитали, але у мене просто було те саме. Як вже зазначав Estel, проблема з ключовими слухачами полягає в тому, що вони працюють лише з апаратними клавіатурами. Для цього за допомогою IME (м'яка клавіатура) рішення є дещо складнішим.
Єдиний метод , який ми дійсно хочемо перевизначити це sendKeyEvent
в EditText
«S InputConnection
класу. Цей метод називається, коли ключові події відбуваються в IME. Але для того, щоб це перекрити, нам потрібно реалізувати звичай, EditText
який переосмислює onCreateInputConnection
метод, обертаючи типовоInputConnection
об'єкт у клас проксі! : |
Звучить складно, але ось найпростіший приклад, на який я міг би надуматися:
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);
}
}
}
У рядку із закликом до того setRandomBackgroundColor
, де відбувається моя спеціальна дія в області резервного простору. У цьому випадку змінюєтьсяEditText
колір фону.
Якщо ви надуваєте це з XML, не забудьте використати повне ім'я пакета як тег:
<cc.buttfu.test.ZanyEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/somefield"
></cc.buttfu.test.ZanyEditText>