簡體   English   中英

無法在模擬器中檢測到軟鍵盤的刪除按鈕

[英]Unable to detect delete button of soft keyboard in emulator

我正在嘗試使用以下方法檢測軟鍵盤的后退或刪除按鈕。 它可以在物理設備中完美運行,但不能運行emulator 仿真器能夠檢測到所有期望刪除按鈕的按鍵事件(例如,輸入按鈕,數字按鈕)。 在模擬器中按下刪除按鈕時,不會調用onKeyDown()dispatchKeyEvent() 可能是什么問題?

這樣做的目的:

如果用戶在當前空的EditText字段上按Delete鍵,我試圖導航到以前的EditText字段。 這就是為什么我依賴dispatchKeyEvent()方法的原因。

我正在使用Nexus 5X API 25仿真器

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DEL) {
            Log.e(TAG,keyCode)
        }
        return super.onKeyDown(keyCode, event);
    }

這是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:hint="Name" />

</RelativeLayout>

刪除按鈕的圖像:

在此處輸入圖片說明

了解您的要求后,我發現onKeyDownonKeyUp不能在Nexus 5 API 25模擬器上運行,但是如果您確實想使用Nexus 5 API 25模擬器,則TextWatcher可以滿足您的目的。

Nexus 5X API 26onKeyDownonKeyUp可以正常工作。 當然, TextWatcher也可以正常工作。

使用TextWatcher來檢測EditText中文本的更改,然后您可以在其中檢查按下了哪個鍵。 下面是工作代碼:

    TextWatcher textWatcher = new TextWatcher() {

        public void  beforeTextChanged(CharSequence s, int start, int count, int after){
            if (after < count) {
                Log.d("DELETE_KEY_PRESSED", "beforeTextChanged: ");
            }
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("\n")) {
                Log.d("ENTER_KEY_PRESSED", "onTextChanged: ");
            } else if (s.length() == 0) {
                Log.d("DELETE_KEY_PRESSED", "onTextChanged: ");
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };

    EditText editText = (EditText) findViewById(R.id.edit);
    editText.addTextChangedListener(textWatcher);

您也可以使用TextWatcher來檢測所有其他按下的鍵。

順便說一句,對我來說, onKeyDown()onKeyUp()在模擬器上也可以正常工作。 我正在使用以下代碼:

//To detect DELETE KEY PRESS event there is no text in EditText
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_DEL) {
        Log.d("KEY_PRESSED - onKeyDown", "KEYCODE_DEL");
    }
    return super.onKeyDown(keyCode, event);
}

//To detect DELETE KEY PRESS event there is no text in EditText
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_DEL) {
        Log.d("KEY_PRESSED - onKeyUp", "KEYCODE_DEL");
    }
    return super.onKeyUp(keyCode, event);
}

注意:我使用的是Nexus 5X API 26仿真器

暫無
暫無

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

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