如何在Kotlin中使用KeyEvent

这是我的kotlin / java代码。 我想从中学习。

当我按下Android键盘的“确定”按钮,我想我的应用程序做同样的事情,当我推我的按钮与android:onClick =“onAnswerClick”

我知道我的代码不是很好。 你不能帮助我知道如何优化它

我不知道它是一个好主意,学习在Android上与kotlin代码。

import android.annotation.SuppressLint import android.app.Activity import android.os.Bundle import android.view.KeyEvent import android.view.View import android.view.inputmethod.EditorInfo import android.widget.* import android.widget.AdapterView import android.widget.Toast import android.widget.Spinner import kotlinx.android.synthetic.main.activity_main.* import android.widget.EditText class MainActivity : Activity() { class Calculateurs{ fun aire(r: Double): Double{ return 3.141592 * r * r } fun circonference(r: Double): Double{ return 2.0 * 3.141592 * r } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val spinner = findViewById<Spinner>(R.id.spinner) as Spinner // Create an ArrayAdapter using the string array and a default spinner layout val adapter = ArrayAdapter.createFromResource(this, R.array.mesure_array, android.R.layout.simple_spinner_item) // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) // Apply the adapter to the spinner spinner.adapter = adapter } @SuppressLint("SetTextI18n") fun onAnswerClick(view: View) { val answer = (findViewById<EditText>(R.id.editText2) as EditText).text.toString() val spinner = findViewById<View>(R.id.spinner) as Spinner var rayon = java.lang.Double.parseDouble(answer) if (spinner.getSelectedItem() == "Diamètre"){ rayon = rayon *2 } if (rayon < 0) { val toasty = Toast.makeText(applicationContext, "Ce nombre est négatif !", Toast.LENGTH_SHORT) toasty.show() } else if (rayon > 0) { val c = Calculateurs() val tc = findViewById<TextView>(R.id.cire) as TextView tc.text = "" + c.circonference(rayon) val ta = findViewById<TextView>(R.id.aire) as TextView ta.text = "" + c.aire(rayon) } else { val toasty = Toast.makeText(applicationContext, "Ce nombre est nul !", Toast.LENGTH_SHORT) toasty.show() } } } 

我想你的问题是,如何让你的应用程序在EditText中按下输入或完成键时作出响应。

既然你没有显示你的布局,我会做一些假设。

比方说,你有和EditText有以下属性(加上其他)

 <EditText android:id="@+id/field" android:imeOptions="actionDone" android:inputType="text" ... app:layout_constraintTop_toTopOf="parent" /> 

以下是一个将响应按下Enter键的示例活动。

 class MainActivity : AppCompatActivity() { lateinit var field: EditText override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) field = findViewById(R.id.field) as EditText } override fun onResume() { super.onResume() field.setOnEditorActionListener( { textView, action, event -> var handled = false if (action == EditorInfo.IME_ACTION_DONE) { println("call your method here") handled = true } handled }) } 

你可以在println("call your method here")语句中调用你的onAnswerClick() println("call your method here") ,如果你喜欢,可以传入textView

本示例使用Kotlin文档的本节中介绍的Kotlin的SAM转换,特别是使用SAM转换从lambda表达式创建TextView.OnEditorActionListener

正如Kamil Kulig所指出的那样,使用Java的例子和示例肯定比Kotlin更多,但是我不认为你必须从Java开始。 您需要学习足够多的Java才能理解示例和文档中正在发生的事情。