Cómo usar KeyEvent en Kotlin

Este es mi primer código de kotlin / java. Quiero aprender de esto.

Cuando presiono el button "Aceptar" del keyboard de Android, quiero que mi aplicación haga lo mismo cuando presiono mi button con Android: onClick = "onAnswerClick"

Sé que mi código no es muy bueno. no puedes ayudarme a saber cómo optimizarlo

No sé si es una buena idea aprender a codificar en Android con 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 air(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.air) as TextView ta.text = "" + c.air(rayon) } else { val toasty = Toast.makeText(applicationContext, "Ce nombre est nul !", Toast.LENGTH_SHORT) toasty.show() } } } 

Creo que su pregunta es cómo hace que su aplicación responda a la tecla enter o done cuando lo presiona en EditText.

Como no mostró su layout, haré algunas suposiciones.

Digamos que tiene y EditText que tiene los siguientes attributes (más otros)

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

Aquí hay una actividad de ejemplo que responderá al presionar la tecla Intro.

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

Puedes llamar a onAnswerClick() en la location de la println("call your method here") , pasando textView si lo deseas.

Este ejemplo hace uso de la Conversión SAM de Kotlin que se trata en esta sección de la documentation de Kotlin, específicamente utiliza la conversión SAM para crear un TextView.OnEditorActionListener a partir de una expresión lambda

Como señala Kamil Kulig, definitivamente hay más muestras y ejemplos que usan Java que Kotlin, pero no creo que deba comenzar con Java. Sin embargo, deberá aprender suficiente Java para poder entender lo que está sucediendo en ejemplos y documentation.

  • ¿Cómo generar serialVersionUID para excepciones kotlin?
  • Kotlin Dagger 2 no puede proporcionar Interactor
  • División de routes en múltiples files
  • Habilitación de la página de inicio de session para el server de autorizaciones / resources de spring
  • Archivo de activos abiertos de Android Kotlin
  • Importar librerías de dependencia en terminal kotlinc
  • Delegación de class parcial en Kotlin
  • ¿Cómo crear una matriz Java en Kotlin para @PropertySource?
  • ¿Por qué HashMap.get no devuelve un tipo que admite nulos?
  • ¿Cómo agregar el soporte de Kotlin para Java Lib normal en Android?
  • Error de complemento de Android Studio Kotlin