【Android】 대화 상자의 match_parent 정보

다이얼로그의 폭・높이 가득 넓히는데 수고 걸렸으므로 메모.
별로 사용하는 장면은 없다고 생각하지만.

AlertDialog



AlertDialog는 비교적 쉽게 구현할 수 있기 때문에 이것을 사용했습니다.
다만, 이것이라면 폭·높이 가득 펼칠 수 없다.



MainActivity.kt
val dialog = AlertDialog.Builder(this).apply {
    setTitle("タイトル")
    setMessage("メッセージ")
    setNegativeButton("閉じる") { dialog, _ -> dialog.cancel() }
}.create()

//このようにmatch_parentを使おうとしても意味がない
dialog.window?.setLayout(
    ViewGroup.LayoutParams.MATCH_PARENT,
    ViewGroup.LayoutParams.MATCH_PARENT
)

dialog.show()

Dialog



통상의 다이얼로그를 사용하면, 폭·높이 가득 넓힐 수 있다.



우선 다이얼로그의 레이아웃 작성.

test_dialog.xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingHorizontal="60dp"
    android:paddingVertical="20dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:text="タイトル"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:text="メッセージ"
        android:textSize="18sp" />

    <Button
        android:id="@+id/button"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="閉じる"
        android:textColor="@color/black" />
</LinearLayout>

다음으로 처리 부분의 작성. 여기서 match_parent 지정.

TestDialogFragment.kt
class TestDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return Dialog(requireContext()).apply {
            val binding = TestDialogBinding.inflate(LayoutInflater.from(context))

            binding.button.setOnClickListener {
                dismiss()
            }
            setContentView(binding.root)

            //ここで幅・高さをmatch_parentにする
            window?.setLayout(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
        }
    }
}

마지막으로 MainActivity에서 대화상자 표시

MainActivity.kt
TestDialogFragment().show(supportFragmentManager, TestDialogFragment::class.java.simpleName)

좋은 웹페이지 즐겨찾기