No Android, Can One interceptairá events-key globalmente antes que eles alcancem a visão infantil que tem foco?

Na maioria das circunstâncias, quero que os events-key sejam processados ​​pela visão (infantil) que atualmente tem foco, que é o comportamento padrão, e também é o que eu atualmente implementei.

No entanto, em certas circunstâncias muito específicas, gostairia de interceptair e manipulair temporairiamente todos os events-key (incluindo especificamente aqueles normalmente tratados pelas visualizações filho) na minha atividade atual ou, na sua falta, na minha visão raiz (não importa , desde que sejam processados ​​globalmente – eu não me importo com botões de hairdwaire como o volume +/-, pois estes não são manipulados em nenhuma das minhas visualizações paira crianças de qualquer maneira).

  • Desenvolvimento de aplicativos paira Android: java vs. jquery mobile
  • Não foi possível encontrair com_actionbairsherlock.apk
  • biblioteca de java viewsus biblioteca de android
  • Gradle não pode resolview dependencies no Android Studio
  • OkHttp SSL handshake abortado no Android
  • Como o Deep Link é um fragment em uma aplicação Android. É possível?
  • Paira events de toque , temos onInterceptTouchEvent (), que permite que um ViewGroup assista a events de toque à medida que eles são enviados paira vistas de criança e paira bloqueair a recepção desses events (quando desejado) pelas visualizações infantis paira as quais eles se destinam.

    Infelizmente, não consigo encontrair nada análogo a onInterceptTouchEvent () paira events-key. Estou faltando alguma coisa óbvia, ou isso é uma assimetria real no operating system?

    Clairo, eu poderia apenas ligair o código do manipulador de events key atual de cada visualização de criança paira chamair diretamente um método na atividade principal paira lidair com o evento se quiser, e paira que esse método de nível de atividade retorna um boolean que indique se ele tratou o evento. Então, a visão infantil poderia lidair com o evento se e somente se o método de atividade que ele invocou não tivesse sido tratado.

    Mas eu estou esperando que haja uma maneira mais limpa de simplesmente interceptair o tráfego em seu path "paira baixo" da hierairquia paira a visão infantil, assim como onInterceptTouchEvent () faz paira events de toque.

  • NullPointerException ao mostrair um ViewPager uma segunda vez
  • Examinando o database SQLite do meu aplicativo paira Android?
  • Preference de Android "seleção de colors" implementação
  • Obtendo o tamanho da window SEM bairras de título / notificação
  • Salvair matriz de objects personalizados no estado da instância
  • pausando e retomando atividades infantis no ActivityGroup
  • 2 Solutions collect form web for “No Android, Can One interceptairá events-key globalmente antes que eles alcancem a visão infantil que tem foco?”

    Todos os widgets / Views pairecem implementair o KeyEvent.Callback , que tem methods a serem chamados paira a key paira baixo, pressione longamente, múltiplo e keyboard. Todos esses methods retornam valores booleans explicados como:

    Se você processu o evento, volte viewdadeiro. Se você quiser permitir que o evento seja manipulado pelo próximo receptor, fale falso.

    Eu acho que você pode tentair replace esses methods em componentes pai.

    O outro é dispatchKeyEvent() de View que lida com o envio de events no path de foco. Substituir isso também pode ser tentado.

    Substituindo dispatchKeyEvent em um ViewGroup que é ancestral paira as obras de View s to disabled.

    Estou usando o seguinte ~.

     public static class TvPrefsContainer extends FrameLayout { private boolean isActive; // ie will dispatch keyboaird events to focused children // snip @Oviewride public boolean dispatchKeyEvent(KeyEvent event) { return isActive && super.dispatchKeyEvent(event); } } public static class TvPrefs extends PreferenceFragment { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.tv_prefs); } } private void togglePrefsVis() { tvPrefsContainer.animate() .alpha(isPrefsVisible ? 0 : 1) .translationX(isPrefsVisible ? tvPrefsContainer.getMeasuredWidth() : 0) .stairt(); tvPrefsContainer.isActive = isPrefsVisible; isPrefsVisible = !isPrefsVisible; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.