Сегодня 15 февраля, суббота ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7278
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
RMCreative.ru - Блог
RMCreative.ru - Блог
Голосов: 1
Адрес блога: http://rmcreative.ru/feed/
Добавлен: 2008-06-12 21:34:00 блограйдером ZaiSL
 

Android: поймать back в EditText

2013-10-30 03:19:28 (читать в оригинале)

Задачка — отловить нажатие хардварьной кнопки back и OK (или Done) на экранной клавиатуре при фокусе на EditText. Вроде должно решаться просто...

В Activity ищем наш EditText, вешаем события:

TextView input = (TextView)findViewById(R.id.input);
if (input != null) {
    input.setOnEditorActionListener(this);
    input.setOnKeyListener(this);
}

Далее реализовываем обработчики:

public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
    if (actionId == EditorInfo.IME_ACTION_DONE){
            // делаем свои дела
            return true;
        }
        return false;
    }
 
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // делаем свои дела
        return true;
    }
    return false;
}

Проверяем. onEditorAction отработал отлично. А вот onKey не сработал. Оказывается, по какой-то неведомой причине, событие именно для EditText надо протолкнуть вручную изрядно извратившись. То есть сначала делаем своего наследника EditText с фиксом:

public class EditTextEx extends EditText {
    public EditTextEx(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public EditTextEx(Context context) {
        super(context);
    }
 
    public EditTextEx(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
 
    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            dispatchKeyEvent(event);
            return false;
        }
        return super.onKeyPreIme(keyCode, event);
    }
}

И после заменяем в наших layout-ах

<EditText
    android:id="@+id/input" />

на

<com.acme.EditTextEx
    android:id="@+id/input" />

Вообще разработка под Android начинает чем-то напоминать мне JavaScript под IE... куча псевдо-совместимых версий ОС и девайсов и, как результат, хак на хаке и хаком погоняет...




 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по количеству голосов (152) в категории «Истории»
Изменения рейтинга
Категория «Стихи»
Взлеты Топ 5
+223
233
CAPTAIN
+196
256
Yurenzo
+185
193
Simple_Blogger
+171
263
Annelle
+166
246
Similis_Deo
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.