У меня такая же проблема.И предположим, что нет хорошего способа реализовать одно решение для обработки событий программной клавиатуры.Я реализовал onKeyListener()
для delete
события и TextWatcher для события ключа.
m_edtRecipients.addTextChangedListener(new TextWatcher() {
boolean bConsumed = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!bConsumed) {
RecipientsTextStyle.format(m_edtRecipients.getText(), m_dbProcessor);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (count != 0) {
bConsumed = true;
Log.d(TAG, "delete true");
} else {
bConsumed = false;
Log.d(TAG, "erase false");
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
У подхода TextWatcher есть один большой недостаток - вы не можете изменить редактируемый текст, связанный с вашим EditText - это вызовет цикл.Будь осторожен!