簡體   English   中英

顯示軟鍵盤時,返回鍵的Android鍵事件?

[英]Android key event for back key when soft keyboard is shown?

我試圖在顯示軟鍵盤時捕獲“后退”鍵事件。

我正在使用SDK ver 8,並且只有在軟鍵盤為HIDDEN時才能成功捕獲后退鍵事件,如下所示:

@Override
public void onBackPressed() {
    // do something
    super.onBackPressed();
}

問題是系統在顯示軟鍵盤時沒有調用此方法。 我試圖登錄KeyDown / Up()方法以及上面的方法來解決這個場景中發生的事情無濟於事。 見下文:

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

按預期返回音量和菜單鍵的日志,但只有在隱藏軟鍵盤和菜單時才會記錄后退鍵。

是否有任何“背鍵”大師可以解釋這種現象?

任何幫助是極大的贊賞。

以下是捕獲按鍵事件的方法:1。擴展editText視圖以覆蓋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);
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event)
    {
        if (keyImeChangeListener != null)
        {
            keyImeChangeListener.onKeyIme(keyCode, event);
        }
        return false;
    }
}
  1. xml中的ChatEditText

      <com.test.test.ChatEditText android:id = "@+id/messageEditText" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_gravity = "bottom" android:layout_marginLeft = "12dp" android:layout_marginRight = "30dp" android:background = "@null" android:hint = "Type your message" android:inputType = "textMultiLine" android:singleLine = "false" android:textColorHint = "#c4c0bd" android:textSize = "18sp"/> 
  2. 然后將一個監聽器(setKeyImeChangeListener)附加到編輯文本:

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

在此網站和Android API上進一步挖掘后,我發現了這一點

KeyEvent.KEYCODE_BACK

由具有輸入法連接的IME捕獲並吞噬並且當前顯示該輸入方法(換句話說,軟鍵盤未被隱藏)。 這意味着在系統調用Activity類onKeyDown()或onKeyUp()方法之前消耗該事件。

要解決這個問題,請創建IME小部件的子類(TextView或其子類,如EditText)並實現onKeyPreIme()

堆棧用戶i2097i發布了一個很好的解決方案,可以在這里的活動中實現onKeyPreIme()。 如果您希望保留Androids默認行為(即關閉鍵盤),請確保在onKeyPreIme()覆蓋中返回FALSE。

通常后退按鈕會隱藏鍵盤(nateve behaivor),因此用它做任何事情都不是一個好主意

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM