2016-10-25 3 views
0

У меня есть простой интерфейс в моем приложении - кнопка в верхней части экрана, EditText в центре экрана и еще две кнопки внизу. Теперь я хотел бы использовать dpad для навигации по элементам приложения, все работает отлично, кроме EditText, - в основном я могу просматривать элементы отлично, кнопки выделяются в фокусе, но не EditText - кажется, что он не отвечает, даже когда я нажимаю кнопку центральная кнопка dpad (поэтому клавиатура не отображается). Например, когда у меня есть самый верхний элемент, выделенный, и я нажимаю на dpad, верхняя кнопка теряет фокус, ни одна из двух кнопок внизу не получает фокус, так что похоже, что именно EditText получает фокус, но он не выделяет никоим образом, и не показывает клавиатуру. Когда я нажимаю на него с помощью курсора (или касаюсь устройства), все в порядке.Сделать FocusText с помощью dpad

Я попытался добавить OnKeyListener, чтобы проверить, но, кажется, не выпалить - вроде EditText не реально получить фокус и KeyEvent не открыли огонь по EditText:

editKanal.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) 
       if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER){ 
        Toast.makeText(getApplicationContext(), "got the focus", Toast.LENGTH_LONG).show(); 
        return true; 
       } 

      return false; 
     } 
    }); 

Может ли кто-нибудь сказать мне, что я делаю неправильно? Как сделать EditText показано нажатие клавиатуры на DPAD_CENTER?

+0

Вы добавили следующий фокус вниз в макет? также все элементы внутри одного макета? –

+0

Спасибо @ Hala.m - вы направили меня в правильном направлении! У меня был набор nextFocusDown, но элементы были в разных макетах - когда я избавился от многих макетов и поместил все в Relative, он внезапно начал работать отлично. – exx

ответ

0

Здравствуйте имел эту проблему, прежде чем наиболее вероятные причины

1-не добавляя фокус вниз

2-элементы, не находящиеся в том же макете

пожалуйста, убедитесь, что оба истинны

+1

Спасибо! Упрощение макета сделало трюк! – exx

0

Попробуйте поставить эту строку после щелчка:

editKanal.requestFocus(); 

Если это не работает, вы можете разместить свой макет Xml?

+0

попробовал это без везения - он не работал, поскольку TextEdit казался неактуальным, поэтому событие KEYCODE_DPAD_CENTER никогда не запускалось, но @ Hala.m выше направлял меня к решению. Мне пришлось переработать мой макет, поэтому разные макеты не были вложенными, и это сработало! – exx

Смежные вопросы