Android ofrece una amplia variedad de widgets para las interacciones del usuario y CheckBox es uno de ellos. CheckBox es un tipo especial de botón con dos estados que pueden estar marcados o desmarcados. Sirven como una herramienta simple para recopilar información del usuario sin mucha molestia. Generalmente se usan para marcar cosas como completadas por el usuario en las aplicaciones de administración de tareas.
Pueden surgir algunas situaciones en las que es posible que no conozcamos todas las propiedades del widget que se mostrarán en el momento de la compilación y es posible que tengamos que asignar esos valores dinámicamente. Afortunadamente, Android admite la creación de widgets en tiempo de ejecución. Veamos cómo crear un CheckBox dinámicamente en Kotlin en lugar de en el momento de la compilación .
Acercarse
Paso 1: Creación de un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio.
Paso 2: Modificación de activity_main.xml
Antes de que se pueda agregar dinámicamente un CheckBox, se debe definir un diseño de antemano para contener el CheckBox. Para mantener la aplicación simple, elija un diseño lineal que cubra toda la pantalla para la aplicación de demostración.
XML
<?xml version="1.0" encoding="utf-8"?> <!--This LinearLayout will serve as the root container to hold the checkbox It will fully occupy the device screen and will place the checkbox at its center--> <LinearLayout android:id="@+id/root_layout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> </LinearLayout>
Paso 3: agregar una string a strings.xml
Es una buena práctica no usar strings codificadas de forma rígida, y hagamos lo mismo en la aplicación.
XML
<resources> <string name="app_name">GFG | Dynamic Checkbox Demo</string> <string name="geek_message">TODO: Become A Geek</string> </resources>
Se puede hacer referencia a esta string en el archivo MainActivity.kt usando:
getString(R.string.geek_message)
Paso 4: trabajar con el archivo MainActivity.kt
Haga referencia al diseño del archivo MainActivity.kt. Esto podría hacerse usando la siguiente línea de código:
val diseño = findViewById<LinearLayout>(R.id.root_layout)
Ahora cree un nuevo CheckBox en el archivo MainActivity.kt y establezca sus parámetros de diseño. Los parámetros de diseño son obligatoriamente necesarios ya que describen cómo el CheckBox interactuará con el diseño.
val geekBox = CheckBox(this)
geekBox.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
Configure un oyente para mostrar un mensaje Toast cada vez que el usuario active CheckBox. Finalmente, agregue el CheckBox creado al diseño usando la siguiente línea de código.
diseño.addView(geekBox)
Kotlin
package org.geeksforgeeks.dynamic_checkbox import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.ViewGroup import android.widget.CheckBox import android.widget.LinearLayout import android.widget.Toast class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // References the root LinearLayout from // the activity_main layout file val layout = findViewById<LinearLayout>(R.id.root_layout) // Create a new Checkbox at run-time val geekBox = CheckBox(this) // Define the layout properties and text for our check box geekBox.layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) geekBox.text = getString(R.string.geek_message) // Set-up a listener to show a Toast message when // the check box is toggled. geekBox.setOnCheckedChangeListener{ _, isChecked -> Toast.makeText(this, if (isChecked) "Congratulations!" + "You Are A Geek Now" else "Don't Give Up", Toast.LENGTH_SHORT).show() } // Add our created check box to the root // layout for it to be displayed layout.addView(geekBox) } }