dialog.getButton() 在 Android Kotlin 中无法访问
dialog.getButton() is not reachable in Android Kotlin
我正在尝试将系统警报对话框按钮的颜色更改为自定义颜色。我一直在尝试使用这个:
dialog.create().getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getColor(R.color.bluish_grey))
但是应用程序崩溃了。
此外,dialog.getButton
不起作用。只有 set...() 方法。
此外,我还尝试在 dialog.show()
之后使用 .getButton()
,但应用程序崩溃并显示以下错误日志。
我的警告对话框不是自定义的,它只是一个系统对话框。那么,是否可以在不使用 XML 的情况下将警报对话框的按钮颜色设置为自定义颜色?
这就是我想要实现的。
这是我目前拥有的:
更新: 错误日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: no.company.app, PID: 26643
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setTextColor(int)' on a null object reference
at no.meshtech.demokit.view.activity.MainActivity.showCancelDialog(MainActivity.kt:402)
at no.meshtech.demokit.view.activity.MainActivity.startUpdate(MainActivity.kt:317)
at no.meshtech.demokit.view.activity.MainActivity.onClick(MainActivity.kt:67)
at android.view.View.performClick(View.java:7869)
at android.widget.TextView.performClick(TextView.java:14958)
at android.view.View.performClickInternal(View.java:7838)
at android.view.View.access00(View.java:886)
at android.view.View$PerformClick.run(View.java:29362)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8019)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
已更新2:
我创建提醒的代码:
override fun showCompletedDialog() {
DfuBaseService.PROGRESS_COMPLETED
val dialog = AlertDialog.Builder(this)
.setTitle(getString((R.string.dfu_completed_title)))
.setMessage(getString(R.string.dfu_completed_message))
.setPositiveButton(R.string.dfu_completed_ok) { dialog, _ ->
transaction(listFragment, R.id.cvCentral)
supportFragmentManager.findFragmentById(R.id.upperContainer)?.let {
supportFragmentManager.beginTransaction().remove(it).commit()
setNavigationTitle(getString(R.string.title_header_devices))
}
upperContainer.visibility = View.GONE
Handler().postDelayed({
onBackPressed()
dialog.dismiss()
}, 400)
}
dialog.setCancelable(false)
dialog.show()
}
您应该在 show()
之后添加 setTextColor
;
val alertDialog = AlertDialog.Builder(this).create()
alertDialog.setTitle(getString((R.string.app_name)))
alertDialog.setMessage(getString(R.string.app_name))
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "RESUME"
) { dialog, which -> dialog.dismiss() }
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "ABORT"
) { dialog, which -> dialog.dismiss() }
alertDialog.show()
alertDialog.setCancelable(false)
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(this,R.color.colorPrimary))
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(ContextCompat.getColor(this,R.color.colorAccent))
尝试使用自定义对话框,
这是代码片段
private fun showDialog(title: String) {
val dialog = Dialog(activity)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog.setCancelable(false)
dialog.setContentView(R.layout.custom_layout)
val body = dialog.findViewById(R.id.body) as TextView
body.text = title
val okBtn = dialog.findViewById(R.id.okBtn) as Button
val noBtn = dialog.findViewById(R.id.noBtn) as TextView
okBtn.setOnClickListener {
dialog.dismiss()
}
noBtn.setOnClickListener { dialog.dismiss() }
dialog.show()
}
val dialog = AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Message")
.setPositiveButton("Positive") { dialog, _ ->
// Do stuff
}.setNegativeButton("Negative"){ dialog, _ ->
// Do stuff
}.create()
dialog.setCancelable(false)
dialog.setOnShowListener {
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(resources.getColor(R.color.colorPrimaryDark))
}
dialog.show()
您应该使用AlertDialog.Builder#create 先创建警报,然后设置#setOnShowListener,您可以在其中更新文本颜色。
我正在尝试将系统警报对话框按钮的颜色更改为自定义颜色。我一直在尝试使用这个:
dialog.create().getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getColor(R.color.bluish_grey))
但是应用程序崩溃了。
此外,dialog.getButton
不起作用。只有 set...() 方法。
此外,我还尝试在 dialog.show()
之后使用 .getButton()
,但应用程序崩溃并显示以下错误日志。
我的警告对话框不是自定义的,它只是一个系统对话框。那么,是否可以在不使用 XML 的情况下将警报对话框的按钮颜色设置为自定义颜色?
这就是我想要实现的。
这是我目前拥有的:
更新: 错误日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: no.company.app, PID: 26643
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setTextColor(int)' on a null object reference
at no.meshtech.demokit.view.activity.MainActivity.showCancelDialog(MainActivity.kt:402)
at no.meshtech.demokit.view.activity.MainActivity.startUpdate(MainActivity.kt:317)
at no.meshtech.demokit.view.activity.MainActivity.onClick(MainActivity.kt:67)
at android.view.View.performClick(View.java:7869)
at android.widget.TextView.performClick(TextView.java:14958)
at android.view.View.performClickInternal(View.java:7838)
at android.view.View.access00(View.java:886)
at android.view.View$PerformClick.run(View.java:29362)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8019)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
已更新2:
我创建提醒的代码:
override fun showCompletedDialog() {
DfuBaseService.PROGRESS_COMPLETED
val dialog = AlertDialog.Builder(this)
.setTitle(getString((R.string.dfu_completed_title)))
.setMessage(getString(R.string.dfu_completed_message))
.setPositiveButton(R.string.dfu_completed_ok) { dialog, _ ->
transaction(listFragment, R.id.cvCentral)
supportFragmentManager.findFragmentById(R.id.upperContainer)?.let {
supportFragmentManager.beginTransaction().remove(it).commit()
setNavigationTitle(getString(R.string.title_header_devices))
}
upperContainer.visibility = View.GONE
Handler().postDelayed({
onBackPressed()
dialog.dismiss()
}, 400)
}
dialog.setCancelable(false)
dialog.show()
}
您应该在 show()
之后添加 setTextColor
;
val alertDialog = AlertDialog.Builder(this).create()
alertDialog.setTitle(getString((R.string.app_name)))
alertDialog.setMessage(getString(R.string.app_name))
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "RESUME"
) { dialog, which -> dialog.dismiss() }
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "ABORT"
) { dialog, which -> dialog.dismiss() }
alertDialog.show()
alertDialog.setCancelable(false)
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(this,R.color.colorPrimary))
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(ContextCompat.getColor(this,R.color.colorAccent))
尝试使用自定义对话框, 这是代码片段
private fun showDialog(title: String) {
val dialog = Dialog(activity)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog.setCancelable(false)
dialog.setContentView(R.layout.custom_layout)
val body = dialog.findViewById(R.id.body) as TextView
body.text = title
val okBtn = dialog.findViewById(R.id.okBtn) as Button
val noBtn = dialog.findViewById(R.id.noBtn) as TextView
okBtn.setOnClickListener {
dialog.dismiss()
}
noBtn.setOnClickListener { dialog.dismiss() }
dialog.show()
}
val dialog = AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Message")
.setPositiveButton("Positive") { dialog, _ ->
// Do stuff
}.setNegativeButton("Negative"){ dialog, _ ->
// Do stuff
}.create()
dialog.setCancelable(false)
dialog.setOnShowListener {
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(resources.getColor(R.color.colorPrimaryDark))
}
dialog.show()
您应该使用AlertDialog.Builder#create 先创建警报,然后设置#setOnShowListener,您可以在其中更新文本颜色。