Android获取软件键盘事件

时间:2016-11-13 14:05:38

标签: java android keyboard

我正在开发Android应用程序,根据要求。我必须记录每个键,如退格,字母,特殊字符。为此,我使用的是一个宽度为0的EditText,因此它不可见。这是代码:

<EditText
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/imageButton"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="14dp"
    android:layout_marginStart="14dp"
    android:id="@+id/editText" />

在我的JAVA课程中,我要求按下按钮时关注EditText,然后通过以下代码显示软件键盘:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

为了获得输入,我使用TextWatcher如下:

@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {   before = charSequence.toString();
}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {     Log.e("TAG","ON_CHANGE: "+charSequence);
}

@Override
public void afterTextChanged(Editable editable) {
    String after = editable.toString();
    if(before.length()>after.length())
    {   Log.e("TAG","BACKSPACE");
    }
    else if(before.length()<after.length())
    {   Log.e("TAG",after.charAt(after.length()-1)+"");
    }
    else
    {   Log.e("TAG","NO CHANGE");
    }
}

现在这个方法的问题如下:

  1. 当EditText字符串的长度为0时,无法捕获退格事件。
  2. 只有单个字符对我很重要,但TextChanging事件适用于整个字符串。
  3. 是否可以以与AWT侦听器相同的方式获取软件键盘事件,例如键上/下事件。

0 个答案:

没有答案