AlertDialog에서 message의 View를 얻고 싶습니다.
소개
Android의 AlertDialog를 사용하는 경우 메시지의 View를 얻고 싶을 수 있습니다.
검색하면 AlertDialog를 그대로 사용하는 패턴으로 message의 TextView를 얻는 방법이 나옵니다.
이런 식으로 ↓
val builder = AlertDialog.Builder(context).apply {
setMessage(message)
}
val dialog = builder.show()
val messageView = dialog.findViewById<TextView>(android.R.id.message)
그러나 대화 에 의하면 AlertDialog는 DialogFragment로 감싸는 것이 추천되고 있어 AlertDialog를 그대로 show() 하는 장면은 그다지 많지 않다고 생각합니다 (적어도 내가 속한 프로젝트에서는).
샘플은 다음과 같습니다 ( 대화에서 발췌).
class FireMissilesDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
return activity?.let {
// Use the Builder class for convenient dialog construction
val builder = AlertDialog.Builder(it)
builder.setMessage(R.string.dialog_fire_missiles)
.setPositiveButton(R.string.fire,
DialogInterface.OnClickListener { dialog, id ->
// FIRE ZE MISSILES!
})
.setNegativeButton(R.string.cancel,
DialogInterface.OnClickListener { dialog, id ->
// User cancelled the dialog
})
// Create the AlertDialog object and return it
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
}
문제점
이 경우 어떻게 메시지의 TextView를 얻을 수 있습니까?
DialogFragment의 show 메소드는 void이므로 처음에 언급한 방식으로 show 후에 AlertDialog를 얻을 수 없습니다. DialogFragment의 인스턴스에서 getDialog()하고 findViewById를 시도해도 getDialog가 null을 반환하는 것 같습니다.
그럼 어떻게 할까.
결론
DialogFragment
onStart
에서 findViewById.class MyDialog: DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
AlertDialog
.Builder(it)
.setMessage("メッセージ")
.setPositiveButton("OK", null)
.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
override fun onStart() {
super.onStart()
val textView = (dialog as? AlertDialog)?.findViewById<TextView>(android.R.id.message)
// 色を変える
textView?.setTextColor(Color.BLUE)
// 文字サイズを変える
textView?.textSize = 40f
}
}
안전하게 문자의 색상과 크기를 변경할 수있었습니다.
Reference
이 문제에 관하여(AlertDialog에서 message의 View를 얻고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/odayushin/items/a0ab86dcda51f475d43e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)