使用Kotlin识别Android软键盘中的击键

时间:2018-10-10 13:49:15

标签: android kotlin keystroke

我是一名学生,目前正在使用Kotlin作为编程语言来构建Android应用程序。该应用程序的目的是注册用户的击键,我将这些击键用于生物识别研究目的。我不精于Kotlin或Android Studio,因为这是我第一次在Android Studio中工作。

该应用程序有许多活动,我正在共享其中一项活动的代码,我需要在Editexts中识别按键,而用户按下软键盘上的键以键入用户名和密码。

我找到了一些有关KeyEvents和一些References的Android开发人员示例。

击键所需的数据如下:

    a. the key pressed. 
    b. key pressed time. 
    c. key released time. 
    d. its ASCII value.

XML代码如下:

<Button
    android:id="@+id/button5"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:background="@drawable/rounded_button"
    android:fontFamily="@font/pt_mono"
    android:onClick="resetval"
    android:text="@string/reset"
    android:textAlignment="center"
    android:textColor="@android:color/background_light"
    android:textSize="18sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="@+id/button4"
    app:layout_constraintStart_toStartOf="@+id/button4"
    app:layout_constraintTop_toBottomOf="@+id/button4"
    app:layout_constraintVertical_bias="0.007" />

<Button
    android:id="@+id/button4"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:background="@drawable/rounded_button"
    android:fontFamily="@font/pt_mono"
    android:onClick="input"
    android:text="@string/inp"
    android:textAlignment="center"
    android:textColor="@android:color/background_light"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="@+id/editText9"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="@+id/editText9"
    app:layout_constraintTop_toBottomOf="@+id/editText9" />

<EditText
    android:id="@+id/editText8"
    android:imeOptions="normal"
    android:layout_width="320dp"
    android:layout_height="28dp"
    android:layout_marginTop="72dp"
    android:autofillHints=""
    android:background="@drawable/rounded_text"
    android:ems="10"
    android:fontFamily="@font/pt_mono"
    android:hint="@string/usrname"
    android:inputType="textEmailAddress"
    android:paddingLeft="10dp"
    android:textAlignment="textStart"
    android:textSize="14sp"
    app:layout_constraintEnd_toEndOf="@+id/textView21"
    app:layout_constraintHorizontal_bias="0.494"
    app:layout_constraintStart_toStartOf="@+id/textView21"
    app:layout_constraintTop_toBottomOf="@+id/textView21" />

<EditText
    android:id="@+id/editText9"
    android:layout_width="0dp"
    android:layout_height="28dp"
    android:layout_marginTop="8dp"
    android:autofillHints=""
    android:background="@drawable/rounded_text"
    android:paddingLeft="10dp"
    android:ems="10"
    android:fontFamily="@font/pt_mono"
    android:hint="@string/pass"
    android:inputType="textPassword"
    android:textAlignment="textStart"
    android:textSize="14sp"
    app:layout_constraintEnd_toEndOf="@+id/editText8"
    app:layout_constraintStart_toStartOf="@+id/editText8"
    app:layout_constraintTop_toBottomOf="@+id/editText8" />

<TextView
    android:id="@+id/textView21"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="52dp"
    android:fontFamily="@font/pt_mono"
    android:text="@string/train_tem"
    android:textAlignment="center"
    android:textColor="@color/btext"
    android:textSize="30sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Kotlin代码如下:

class trainingT : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar?.title = "Training Template"
    setContentView(R.layout.activity_training_t)
    //getuserkeystroke()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        KeyEvent.KEYCODE_D -> {
            getuserkeystroke(keyCode)
            true
        }
        else -> super.onKeyDown(keyCode, event)
    }
}
private fun getuserkeystroke(keyCode: Int){
    Log.d("D should be displayed", "Is it displayed?")//keyCode.toString())
    val toast = Toast.makeText(getApplicationContext(), "D is Pressed", Toast.LENGTH_LONG)
    val layout = toast.getView() as LinearLayout
    if (layout.childCount > 0) {
        val tv = layout.getChildAt(0) as TextView
        tv.gravity = Gravity.CENTER_VERTICAL or Gravity.CENTER_HORIZONTAL
    }
    toast.show()
}}

到目前为止,我仍然停留在点号“ a”上。我缺少一些我知道的东西,因为必须在Editext空间中识别按下的键,但是我不知道该怎么做。一旦按下“ d键”(我正在考虑识别至少一个键并在随机键之后),Kotlin代码应立即调用getuserkeystroke()函数,在日志中显示调试消息,并应显示祝酒词,但它不起作用。

请提出如何进行实时键入以识别Android软键盘上按下的键的方法?还有关于如何获取我在“ b”,“ c”和“ d”点提到的数据的一些建议。

活动屏幕截图如下:Screenshot

0 个答案:

没有答案