2015-11-25 12 views
0

Как я описал в заголовке, моя проблема заключается в том, что есть представление, которое не является настраиваемым. Так что теперь я понятия не имею, как получить KeyEvents от View ...Как получить события hardkey в оверлее системы с нефокусируемым представлением?

Edit: Если возможно, событие может быть прослушан от службы

ответ

0

Я использовал этот код в виде фрагмента на закрытие Просмотреть в полноэкранном режиме пейджера и он работает

View v = inflater.inflate(R.layout.fragment_addetails, container1, 
      false); 
    v.setFocusableInTouchMode(true); 
    v.requestFocus(); 
    v.setOnKeyListener(new OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK 
        && pager.getVisibility() == View.VISIBLE) { 
       pager.setVisibility(View.GONE); 
       return true; 
      } 
      return false; 
     } 
    }); 

или это

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     case KeyEvent.KEYCODE_BACK: 
      //do code 
      return true 
} 
     return false; 
} 

может быть, это поможет Если нет, опишите полный сценарий того, что вы пытаетесь достичь.

+0

Я пробовал это раньше, чем переопределить функцию onKey или установить onkeylistener, но я думаю, что это не работает, потому что представление не настраивается. Теперь я расскажу вам полный сценарий: у меня есть услуга. Оттуда я показываю наложение с видом в нем. И оттуда ваш код не работает. Он просто проигнорирован ... –

+0

см. Отредактированный код Это работает для меня, чтобы установить, что вы надуваетесь, чтобы быть установленнымFocusableInTouchMode (true); и он должен работать удачи –

+0

Nonono это systemoverlay, и это НЕ должно быть фокусируемым, фокус должен идти под взглядом! –

0

Хорошо, я узнал, что могу использовать MediaButton для получения KeyEvent, которого я хотел. Мне просто нужно было объявить BroadcastReceiver и зарегистрировать его. Это оно!