App노자

[Android] Dialog란 본문

Android/AndroidStudio

[Android] Dialog란

앱의노예 2023. 4. 13. 22:18

1. Dialog란


사용자가 결정을 내리거나 추가 정보를 입력하는 메시지를 표시하는 작은 창이다 

사용자가 다음으로 계속 진행하기 전에 조치를 취하는 이벤트에 사용한다

공식문서에서는 Base Class인 Dialog에 직접 인스턴스화하는 것은 삼가야 한다고 소개하고 있으며  

Sub Class인 AlertDialog, DatePickerDialog, TimePickerDialog를 사용하는 걸 권장하고 있다

 

https://developer.android.com/reference/android/app/Dialog

 

Dialog  |  Android Developers

 

developer.android.com

2. 제목과 콘텐츠 영역


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val Dialog: Button = findViewById(R.id.btndialog)

        Dialog.setOnClickListener {
            AlertDialog.Builder(this)
                .setTitle("제목 -> setTitle")
                .setMessage("설명 -> setMessage")
                .create()
                .show()
        }
    }
}

AlertDialog 클래스를 사용하면 여러 가지 대화상자 디자인을 빌드할 수 있으며 두 번째 그림과  같이 세 가지 영역이 있다

  • 제목: 선택사항이며 콘텐츠 영역에 상세한 메시지, 목록 또는 맞춤 레이아웃이 채워져 있는 경우에만 사용해야 한다.  단순한 메시지 또는 질문을 나타내야 하는 경우 제목은 없어도 된다
  • 콘텐츠 영역: 메시지, 목록 또는 다른 맞춤 레이아웃을 표시할 수 있다
  • 작업 버튼: 대화상자 하나에 작업 버튼이 세 개를 초과할 수 없다

3. 버튼 추가


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val Dialog: Button = findViewById(R.id.btndialog)

        Dialog.setOnClickListener {
            AlertDialog.Builder(this)
                .setTitle("제목 -> setTitle")
                .setMessage("설명 -> setMessage")
                .setPositiveButton("ok", object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface, which: Int) {

                    }
                })
                .setNegativeButton("cancel", object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface, which: Int) {

                    }
                })
                .setNeutralButton("neutral", object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface, which: Int) {

                    }
                })
                .create()
                .show()
        }
    }
}

set... Button에는 버튼의 제목이 필요하고, 사용자가 버튼을 눌렀을 때

실행할 작업을 정의하는 DialogInterface.OnClickListener가 필요하다

  • setPositiveButton: 작업을 수락하고 계속 진행하는 데 사용해야 한다
  • setNegativeButton: 작업을 취소하는 데 사용해야 한다
  • setNeutralButton: 사용자가 작업을 계속하고 싶지 않지만 취소하고 싶지도 않은 경우에 사용해야 한다 (ex 나중에 알림)

4. 리스트


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val Dialog: Button = findViewById(R.id.btndialog)
        val array = arrayOf("1", "2", "3")

        Dialog.setOnClickListener {
            AlertDialog.Builder(this)
                .setTitle("list")
                .setItems(array, object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface, which: Int) {
                        val currentItem = array[which]
                        Log.d("list", "currentItem : $currentItem")
                    }
                })
                .show()
        }
    }
}

목록은 대화상자의 콘텐츠 영역에 나타나므로 대화상자는 메시지와 목록을 둘 다 표시할 수는 없다.

setTitle로 제목을 설정하고 setItems을 호출하고 배열을 전달해 목록의 항목을 지정한다

동적 데이터는 setAdapter를 사용하여 목록을 지정할 수 있으며 Loader를 사용하면 콘텐츠가 비동기식으로 로드된다

5. 라디오박스(단일 선택)


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val Dialog: Button = findViewById(R.id.btndialog)
        val array = arrayOf("1", "2", "3")
        var checkedItemPosition = 0

        Dialog.setOnClickListener {
            AlertDialog.Builder(this)
                .setTitle("radio")
                .setSingleChoiceItems(array, checkedItemPosition, object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface, which: Int) {
                        checkedItemPosition = which
                    }
                })
                .setPositiveButton("ok", object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface?, which: Int) {

                    }
                })
                .show()
        }
    }
}

라디오박스를 추가하려면 setSingleChoiceItems을사용한다

선택한 항목을 변수로 저장해 사용자의 선택을 유지시킬 수 있다

6. 체크박스(다중 선택)


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val Dialog: Button = findViewById(R.id.btndialog)
        val array = arrayOf("1", "2", "3")
        val checkedArray = booleanArrayOf(false, false, false)

        Dialog.setOnClickListener {
            AlertDialog.Builder(this)
                .setTitle("checkbox")
                .setMultiChoiceItems(array, checkedArray, object : DialogInterface.OnMultiChoiceClickListener {
                    override fun onClick(dialog: DialogInterface, which: Int, isChecked: Boolean) {
                        checkedArray[which] = isChecked
                    }
                })
                .setPositiveButton("ok", object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface?, which: Int) {

                    }
                })
                .show()
        }
    }
}

체크박스를 추가하려면 setMultiChoiceItems을사용한다

선택한 항목을 ArrayList에 저장해 사용자의 선택을 유지시킬 수 있다

'Android > AndroidStudio' 카테고리의 다른 글

[Android] DialogFragment란  (0) 2023.04.22
[Android] <include> tag  (0) 2023.04.19
[Kotlin] ViewPager2란  (0) 2023.04.03
[Android] Button pressed effect 구현 방법  (0) 2023.03.31
[Android] GridLayoutManager RecyclerView 구현 방법  (0) 2023.03.30