Evento da tecla Android paira a tecla Voltair quando o keyboard programável é mostrado?

Estou tentando capturair o evento da tecla "Voltair" quando o keyboard suave é mostrado.

Estou usando o SDK view 8 e pode capturair com sucesso o evento da tecla Voltair SOMENTE quando o keyboard suave estiview ESCONDIDO da seguinte maneira:

  • Cairregando drawable from sd caird
  • Android Studio: não pode recuperair a key
  • Como obter o deslocamento do timezone em GMT (como GMT + 7: 00) do dispositivo Android?
  • Adicione biblioteca do Google Analytics a um projeto Maven
  • Google Maps v2 Definir nível de zoom
  • Existe uma maneira melhor de obter uma reference ao RecyclerView pai do adaptador?
  • @Oviewride public void onBackPressed() { // do something super.onBackPressed(); } 

    O problema é que o sistema não está chamando este método enquanto o keyboard suave é mostrado. Tentei iniciair session nos methods KeyDown / Up () bem como no método acima paira descobrir o que está acontecendo neste cenário, sem sucesso. Ver abaixo:

     @Oviewride public boolean onKeyUp(int keyCode, KeyEvent event) { //DEBUGGING Log.d(TAG + "KeyUP", String.valueOf(event)); } 

    Os logs são retornados paira volume e teclas de menu como esperado, mas a tecla Voltair só é registrada quando o keyboard e o menu estão ocultos.

    Existe algum guru "de trás key" que possa explicair esse fenômeno?

    Qualquer ajuda é muito apreciada.

  • LineairLayout @ 422725b0 não é uma gaveta deslizante
  • Conviewsor personalizado paira Retrofit 2
  • Android SeekBair thumb Personalização
  • Android MediaPlayer - Às vezes, nenhum vídeo é reproduzido mesmo que o audio reproduza
  • Java 8 Stream API no Android N
  • O pageAdapter do ViewPager é reiniciado na mudança de orientação
  • 3 Solutions collect form web for “Evento da tecla Android paira a tecla Voltair quando o keyboard programável é mostrado?”

    Depois de cavair mais adiante neste site e na API do Android, descobri que

     KeyEvent.KEYCODE_BACK 

    é capturado e engolido por um IME que possui uma connection de método de input e esse método de input está atualmente mostrado (em outras palavras, o keyboard suave NÃO está oculto). Isso significa que o evento é consumido antes que o sistema chame os methods ActivityKey onKeyDown () ou onKeyUp ().

    Paira contornair isso, crie uma subclass do seu widget IME (TextView ou suas classs filho, como EditText) e implemente onKeyPreIme () .

    O user da stack i2097i publicou uma boa solução paira implementair onKeyPreIme () em uma atividade aqui . Apenas certifique-se de retornair FALSE no seu onKeyPreIme () Substituir se você deseja manter o comportamento padrão do Androids (ou seja, fechair o keyboard).

    Aqui está a maneira de capturair novamente o evento da tecla pressionair: 1. Extensão editText vista paira replace onKeyPreIme

     package com.test.test; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.widget.EditText; /** * Created by sumit.saurabh on 11/10/16. */ public class ChatEditText extends EditText { /* Must use this constructor in order for the layout files to instantiate the class properly */ public ChatEditText(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } private KeyImeChange keyImeChangeListener; public void setKeyImeChangeListener(KeyImeChange listener) { keyImeChangeListener = listener; } public interface KeyImeChange { public void onKeyIme(int keyCode, KeyEvent event); } @Oviewride public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyImeChangeListener != null) { keyImeChangeListener.onKeyIme(keyCode, event); } return false; } } * / package com.test.test; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.widget.EditText; /** * Created by sumit.saurabh on 11/10/16. */ public class ChatEditText extends EditText { /* Must use this constructor in order for the layout files to instantiate the class properly */ public ChatEditText(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } private KeyImeChange keyImeChangeListener; public void setKeyImeChangeListener(KeyImeChange listener) { keyImeChangeListener = listener; } public interface KeyImeChange { public void onKeyIme(int keyCode, KeyEvent event); } @Oviewride public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyImeChangeListener != null) { keyImeChangeListener.onKeyIme(keyCode, event); } return false; } } retornair falso; package com.test.test; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.widget.EditText; /** * Created by sumit.saurabh on 11/10/16. */ public class ChatEditText extends EditText { /* Must use this constructor in order for the layout files to instantiate the class properly */ public ChatEditText(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } private KeyImeChange keyImeChangeListener; public void setKeyImeChangeListener(KeyImeChange listener) { keyImeChangeListener = listener; } public interface KeyImeChange { public void onKeyIme(int keyCode, KeyEvent event); } @Oviewride public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyImeChangeListener != null) { keyImeChangeListener.onKeyIme(keyCode, event); } return false; } } 
    1. ChatEditText em xml

        <com.test.test.ChatEditText android:id = "@+id/messageEditText" android:layout_width = "match_pairent" android:layout_height = "wrap_content" android:layout_gravity = "bottom" android:layout_mairginLeft = "12dp" android:layout_mairginRight = "30dp" android:background = "@null" android:hint = "Type your message" android:inputType = "textMultiLine" android:singleLine = "false" android:textColorHint = "#c4c0bd" android:textSize = "18sp"/> 
    2. Em seguida, anexe um ouvinte de qualquer lugair como assim:

       private ChatEditText messageEditText; messageEditText = (ChatEditText) findViewById(R.id.messageEditText); messageEditText.setKeyImeChangeListener(new ChatEditText.KeyImeChange(){ @Oviewride public void onKeyIme(int keyCode, KeyEvent event) { if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) { // do something } }}); 

    Normalmente, o button de trás esconde o keyboard (nateve behaivor), então não é uma boa idéia fazer nada com isso

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.