Распознавать нажатия клавиш в Android Soft Keyboard с помощью Kotlin - PullRequest
0 голосов
/ 10 октября 2018

Я студент и сейчас создаю приложение для Android с Kotlin в качестве языка программирования.Цель приложения будет регистрировать нажатия клавиш от пользователей, которые я буду использовать для биометрических исследований.Я не обладаю достаточными знаниями в Kotlin или Android Studio, так как я впервые работаю в Android Studio.

В приложении много действий, и я делюсь кодом из одного из действий, где мне нужно распознатьнажатия клавиш в Editexts, в то время как пользователь нажимает клавиши на программной клавиатуре для ввода имени пользователя и пароля.

Я нашел несколько примеров для разработчиков Android о KeyEvents и некоторых References .

Данные, которые мне нужны от нажатия клавиш, следующие:

    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" />

Код Котлина выглядит следующим образом:

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()
}}

Пока я застрял на точке с номером "а".Мне не хватает того, что я знаю, поскольку нажатая клавиша должна быть распознана внутри пространства Editext, но я понятия не имею, как это сделать.Код Kotlin должен вызывать функцию getuserkeystroke () сразу после нажатия клавиши «d» (я думал о распознавании хотя бы одной клавиши и после этого случайных клавиш), отображать сообщение отладки в журнале и отображать тост, ноэто не работает.

Подскажите, пожалуйста, как мне поступить, чтобы распознавать клавиши, нажимаемые на программной клавиатуре Android при наборе в реальном времени?А также некоторые предложения о том, как получить данные, которые я упомянул в пунктах "b", "c" и "d".

Снимок экрана действий выглядит следующим образом: Снимок экрана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...