在工作中碰到前辈写的代码,发现按下按钮就可以直接在EditText上显示出来,没有任何的赋值操作。百思不得其解,最后询问公司同事,发现这样我没有见过的操作。
先来一个布局文件(activity_main.xml):
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/showText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.387" />
<Button
android:id="@+id/keyDown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
实现类:
package com.example.keydown
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.KeyEvent
import android.widget.Button
import android.widget.EditText
class MainActivity : AppCompatActivity() {
lateinit var button: Button
lateinit var text: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button = findViewById(R.id.keyDown)
text = findViewById(R.id.showText)
button.setOnClickListener {
//input:0
pressKey(KeyEvent.KEYCODE_0)
}
}
private fun pressKey(keyCode:Int){
//input
val keyEvent = KeyEvent(KeyEvent.ACTION_DOWN,keyCode)
text.onKeyDown(keyCode,keyEvent)
}
}
使用onKeyDown方法,传入键盘事件,就可以模拟输入法输入了。
点击一下这个按钮,输入框里就会出现0