Android Custom Dialogを作成し、ClickLister定義を使用してクリックイベントを定義します.
個人的にはアンドロイドの基本ダイヤルデザインが好きではありません.💦 基本色を低状態で変更しても、1つのプロンプトウィンドウでAPP全体を分散させる設計コンセプトを考慮して、基本プロンプトウィンドウのダイヤルアップレコードをすべてカスタマイズすることができます.
作成するCustom Dialog.TextViewは、複数ページ(activity,fragment)用の固定文ではなくパラメータ化された文を提供します.
🎈 設計-xml合成
まず
dialog_confirm.xml
ファイルを作成します.Button
スタイルは筆者が単独で定義したもので、自分のスタイルに合わせて設計することができます.dialog_confirm.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/view_round_white_6"
android:gravity="center"
android:minWidth="300dp"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/confirmTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="50dp"
android:textSize="14sp"
tools:text="확인창입니다." />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<Button
android:id="@+id/noButton"
style="@style/MainOutlineButton"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginEnd="7dp"
android:layout_weight="1"
android:text="취소"
android:textSize="14sp" />
<Button
android:id="@+id/yesButton"
style="@style/MainFillButton"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="확인"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
枠線を丸くするにはdrawableで次のファイルを作成し、dialog_confirm.xml
の最高レイアウトbackground
に適用します.view_round_white_6.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<corners android:radius="6dp" />
</shape>
🎈 Custom Dialogクラスの作成
削除するid値を渡す必要があるため、id値をパラメータとして入れますが、単純にアクティビティを終了したり、()を終了したりしたい場合は、パラメータを受信する必要はありません.
ダイヤルアップログ
dismiss()
のみを終了したい場合は、次のDialogクラスで終了を定義できますが、アクティビティfinish()
を終了したい場合は、インタフェースを介してアクティビティの動作を定義する必要があります.class ConfirmDialog(
confirmDialogInterface: ConfirmDialogInterface,
text: String, id: Int
) : DialogFragment() {
// 뷰 바인딩 정의
private var _binding: DialogPackageDeleteBinding? = null
private val binding get() = _binding!!
private var confirmDialogInterface: ConfirmDialogInterface? = null
private var text: String? = null
private var id: Int? = null
init {
this.text = text
this.id = id
this.confirmDialogInterface = confirmDialogInterface
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = DialogPackageDeleteBinding.inflate(inflater, container, false)
val view = binding.root
// 레이아웃 배경을 투명하게 해줌, 필수 아님
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
binding.confirmTextView.text = text
// 취소 버튼 클릭
binding.noButton.setOnClickListener {
dismiss()
}
// 확인 버튼 클릭
binding.yesButton.setOnClickListener {
this.confirmDialogInterface?.onYesButtonClick(id!!)
dismiss()
}
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
interface ConfirmDialogInterface {
fun onYesButtonClick(id: Int)
}
🎈 使用するアクティビティまたはクリップから呼び出す
必要なactivityまたはfragmentでカスタムダイヤルとインタフェースを定義すると終了します.
ここで少し指摘します。🙋🏻♀️
dialog.show(manager:FragmentManager,tag:String)呼び出し時にmanagerに渡す値!
this.supportFragmentManager
activity?.supportFragmentManager!!
class MainActivity : AppCompatActivity(), ConfirmDialogInterface {
private lateinit var binding: ActivityMainBinding
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
clickViewEvents()
}
// 뷰 클릭 이벤트 정의
private fun clickViewEvents() {
// 삭제 버튼 클릭
binding.deleteButton.setOnClickListener {
val dialog = ConfirmDialog(this, "패키지를 삭제하시겠습니까?", pkgId)
// 알림창이 띄워져있는 동안 배경 클릭 막기
dialog.isCancelable = false
dialog.show(this.supportFragmentManager, "ConfirmDialog")
}
}
override fun onYesButtonClick(id: Int) {
// 액티비티 종료를 원한다면 finish()를 호출해주면 되겠죵 :)
deletePackageApiCall(id)
}
}
Reference
この問題について(Android Custom Dialogを作成し、ClickLister定義を使用してクリックイベントを定義します.), 我々は、より多くの情報をここで見つけました https://velog.io/@dear_jjwim/안드로이드-커스텀-다이얼로그Custom-Dialog-만들기-ClickListener로-클릭-이벤트-정의까지テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol