[英]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;
}
}
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"/>
然后將一個監聽器(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.