我是一名学生,目前正在使用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