在 kotlin 的 android 中创建对话框的好方法是什么?
What is a good way of creating dialog in android in kotlin?
我有一个SettingsActivity.kt如下:
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setLayout()
setListeners()
}
private fun setLayout() {/* fun to set layout* /}
private fun setListeners() {
val day = findViewById<LinearLayout>(R.id.settings_day)
day.setOnClickListener { myDialog() }
/* some other dialogs created in similar way */
}
private fun myDialog() {
val prefs = getSharedPreferences("SETTINGS", Context.MODE_PRIVATE)
var selectedDay = prefs.getInt("day", 1)
val myBuilder = AlertDialog.Builder(this)
myBuilder
.setTitle(R.string.settings_day)
.setSingleChoiceItems(R.array.days, selectedDay) { _, which ->
selectedDay = which
}
.setPositiveButton(R.string.dialog_ok) { _, _ ->
val editor = prefs.edit()
editor
.putInt("day", selectedDay)
.apply()
}
.setNegativeButton(R.string.dialog_cancel) { _, _ -> /* do nothing */ }
val theDialog = myBuilder.create()
theDialog.show()
}
}
当设备方向改变时,对话框消失。
我想我必须使用 DialogFragment,但是我有一些问题,
https://developer.android.com/guide/topics/ui/dialogs#kotlin 的官方指南解释不多。我不知道把代码放在哪里。
DialogFragment 上的大部分教程都是针对自定义布局或 java。
那么,有人能告诉我如何转换我的代码吗
以便使用 DialogFragment。
我很难从示例中理解它。
创建 DialogFragment
的子类并将 onCreateDialog()
覆盖为 return 您的 AlertDialog
,例如只需将您的 myDialog
代码移至 myBuilder.create()
即可。
当您想要显示您的 DialogFragment
时,将其实例化并在其上调用 show,传入对片段管理器的引用和一个(可选)标记。例如:
MyDialogFragment().show(requireFragmentManager(), null)
编辑:Anko 现已弃用,请read this。
如果您正在使用 Kotlin,Anko Library 可能会让您感兴趣。它提供了一种创建警报、对话框和其他常见任务的简单方法。
Anko is a Kotlin library which makes Android application development faster and easier. It makes your code clean and easy to read, and lets you forget about rough edges of the Android SDK for Java.
1- 将 Anko 添加到您的项目中
要将 Anko 添加到您的 Android Kotlin 项目中,请将依赖项添加到您的 gradle 文件中
dependencies {
implementation "org.jetbrains.anko:anko:$anko_version"
}
(如果你只想用它来创建对话框,只需添加anko-commons):
implementation "org.jetbrains.anko:anko-commons:$anko_version"
确保在项目级别的 gradle 文件中有 $anko_version 变量:
ext.anko_version='0.10.8'
2- 使用 Anko 创建一个 Alert/Dialog
一个简单的例子:
alert { title = "Your Title goes here!"
customView {
val nameInput = editText() {hint = "Name?"}
positiveButton("OK!") {
if( checkUser(nameInput.text) ) {
sayHelloTo(nameInput.text)
}
}
negativeButton("ABORT!") { /* do nothing */ }
}
}.show()
请阅读Anko Documentation - Dialogs了解如何使用 Anko。
我有一个SettingsActivity.kt如下:
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setLayout()
setListeners()
}
private fun setLayout() {/* fun to set layout* /}
private fun setListeners() {
val day = findViewById<LinearLayout>(R.id.settings_day)
day.setOnClickListener { myDialog() }
/* some other dialogs created in similar way */
}
private fun myDialog() {
val prefs = getSharedPreferences("SETTINGS", Context.MODE_PRIVATE)
var selectedDay = prefs.getInt("day", 1)
val myBuilder = AlertDialog.Builder(this)
myBuilder
.setTitle(R.string.settings_day)
.setSingleChoiceItems(R.array.days, selectedDay) { _, which ->
selectedDay = which
}
.setPositiveButton(R.string.dialog_ok) { _, _ ->
val editor = prefs.edit()
editor
.putInt("day", selectedDay)
.apply()
}
.setNegativeButton(R.string.dialog_cancel) { _, _ -> /* do nothing */ }
val theDialog = myBuilder.create()
theDialog.show()
}
}
当设备方向改变时,对话框消失。
我想我必须使用 DialogFragment,但是我有一些问题, https://developer.android.com/guide/topics/ui/dialogs#kotlin 的官方指南解释不多。我不知道把代码放在哪里。
DialogFragment 上的大部分教程都是针对自定义布局或 java。
那么,有人能告诉我如何转换我的代码吗 以便使用 DialogFragment。 我很难从示例中理解它。
创建 DialogFragment
的子类并将 onCreateDialog()
覆盖为 return 您的 AlertDialog
,例如只需将您的 myDialog
代码移至 myBuilder.create()
即可。
当您想要显示您的 DialogFragment
时,将其实例化并在其上调用 show,传入对片段管理器的引用和一个(可选)标记。例如:
MyDialogFragment().show(requireFragmentManager(), null)
编辑:Anko 现已弃用,请read this。
如果您正在使用 Kotlin,Anko Library 可能会让您感兴趣。它提供了一种创建警报、对话框和其他常见任务的简单方法。
Anko is a Kotlin library which makes Android application development faster and easier. It makes your code clean and easy to read, and lets you forget about rough edges of the Android SDK for Java.
1- 将 Anko 添加到您的项目中
要将 Anko 添加到您的 Android Kotlin 项目中,请将依赖项添加到您的 gradle 文件中
dependencies {
implementation "org.jetbrains.anko:anko:$anko_version"
}
(如果你只想用它来创建对话框,只需添加anko-commons):
implementation "org.jetbrains.anko:anko-commons:$anko_version"
确保在项目级别的 gradle 文件中有 $anko_version 变量:
ext.anko_version='0.10.8'
2- 使用 Anko 创建一个 Alert/Dialog
一个简单的例子:
alert { title = "Your Title goes here!"
customView {
val nameInput = editText() {hint = "Name?"}
positiveButton("OK!") {
if( checkUser(nameInput.text) ) {
sayHelloTo(nameInput.text)
}
}
negativeButton("ABORT!") { /* do nothing */ }
}
}.show()
请阅读Anko Documentation - Dialogs了解如何使用 Anko。