Android为用户交互提供了各种各样的小部件,而CheckBox就是其中之一。 CheckBox是一种特殊的按钮,具有两种状态,可以选中或取消选中。它们是一个简单的工具,可以轻松地从用户那里收集信息。它们通常用于将事物标记为由用户在任务管理应用程序中完成。
在某些情况下,我们可能不知道要在构建时显示的小部件的所有属性,因此可能必须动态分配这些值。值得庆幸的是,Android支持在运行时创建窗口小部件。让我们看看如何在Kotlin中而不是在构建时动态创建CheckBox。
方法
步骤1:建立新专案
要在android studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。
步骤2:修改activity_main.xml
在可以动态添加CheckBox之前,需要预先定义布局以容纳CheckBox。为了使应用程序简单,请为演示应用程序选择一个覆盖整个屏幕的线性布局。
XML
XML
GFG | Dynamic Checkbox Demo
TODO: Become A Geek
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(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)
}
}
步骤3:向字符串.xml添加字符串
最佳实践是不使用硬编码的字符串,让我们在应用程序中进行相同的操作。
XML格式
GFG | Dynamic Checkbox Demo
TODO: Become A Geek
可以使用以下命令在MainActivity.kt文件中引用此字符串:
getString(R.string.geek_message)
步骤4:使用MainActivity.kt文件
从MainActivity.kt文件中引用布局。可以使用以下代码行完成此操作:
val layout = findViewById
现在,在MainActivity.kt文件中创建一个新的CheckBox并设置其布局参数。必须使用布局参数,因为它们描述CheckBox将如何与布局交互。
val geekBox = CheckBox(this)
geekBox.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
设置侦听器以在用户切换CheckBox时显示Toast消息。最后,使用下面的代码行将创建的CheckBox添加到布局中。
layout.addView(geekBox)
科特林
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(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)
}
}