val toast = Toast.makeText(this, "Long Toast", Toast.LENGTH_LONG)
toast.show()
뜨는 시간 조절은 Toast.LENGTH_LONG
, Toast.LENTH_SHORT
로 설정한다.
setDuration()
, setGravity()
, setMargin()
함수를 통해 위치를 변경할 수 있다.
API 레벨 30 부터는 토스트 메세지가 뜨거나 사라지는 순간에 콜백함수가 실행되는 기능이 추가되었다. ( 어노테이션 @RequiresApi(Build.VERSION_CODES.R)
추가 필요 )
toast.addCallback(
object : Toast.Callback(){
override fun onToastHidden() {
super.onToastHidden()
}
override fun onToastShown() {
super.onToastShown()
}
}
)
val datePickerDialog = DatePickerDialog(this, object: DatePickerDialog.OnDateSetListener{
override fun onDateSet(p0: DatePicker?, p1: Int, p2: Int, p3: Int) {
Log.d("lumineko", "${p1}.${p2+1}.${p3}")
}
}, 2022,11,9) // 초기값 2022년 12월 9일
datePickerDialog.show()
onDateSet
을 override하여 설정한 날짜를 콜백 함수로 얻을 수 있다.val timePickerDialog = TimePickerDialog(this, object: TimePickerDialog.OnTimeSetListener{
override fun onTimeSet(p0: TimePicker?, p1: Int, p2: Int) {
Log.d("lumineko", "${p1}:${p2}")
}
}, 15, 0 , true)//24시 표시 여부
timePickerDialog.show()
AlertDialog.Builder(this).run {
setTitle("Title")
setIcon(android.R.drawable.ic_dialog_info)
setMessage("Message")
setPositiveButton("OK", eventHandler)
setNegativeButton("Cancel", eventHandler)
setNeutralButton("Other", null)
show()
}
val eventHandler = object : DialogInterface.OnClickListener{
override fun onClick(p0: DialogInterface?, p1: Int) {
when(p1){
DialogInterface.BUTTON_POSITIVE -> Log.d("lumineko", "positive")
DialogInterface.BUTTON_NEGATIVE -> Log.d("lumineko", "negative")
}
}
}
setMessage 대신 setItems, setMultiChoiceItems, setSingleChoiceItems 를 사용하여 목록을 보여줄 수도 있다.
setItems
val items = arrayOf<String>("배그", "발로", "옵치", "에펙")
AlertDialog.Builder(this).run {
setTitle("Title")
setIcon(android.R.drawable.ic_dialog_info)
setItems(items, object: DialogInterface.OnClickListener{
override fun onClick(p0: DialogInterface?, p1: Int) {
Log.d("lumineko", "${items[p1]}")
}
})
setPositiveButton("OK", eventHandler)
setNegativeButton("Cancel", eventHandler)
setNeutralButton("Other", eventHandler)
show()
}
(결과)
setMultiChoiceItems(items, booleanArrayOf(true,false,false,true), object: DialogInterface.OnMultiChoiceClickListener{
override fun onClick(p0: DialogInterface?, p1: Int, p2: Boolean) {
Log.d("lumineko", "${items[p1]}, $p2")
}
})
setSingleChoiceItems(items, 1, object: DialogInterface.OnClickListener{
override fun onClick(p0: DialogInterface?, p1: Int) {
Log.d("lumineko", "${items[p1]}")
}
})
AlertDialog.Builder(this).run {
...
setCancelable(false) //true일때, 뒤로가기 버튼으로 선택창 닫기
...
}.setCanceledOnTouchOutside(false) //true일때, 화면 밖을 클릭해서 선택창 닫기
레이아웃 XML파일을 코드에서 초기화 하는 기능을 제공한다.
이때 초기화란, XML 파일에 선언한 뷰를 코드에서 이용하고자 생성하는 작업을 의미한다.
XML에 선언한 객체를 생성해서 메모리에 할당한다.
액티비티 화면을 구성하는 레이아웃 XML 파일이면 setContentView() 를 사용하는 반면, 화면을 목적으로 하지 않는 레이아웃 XML 파일에는 LayoutInflater를 사용한다.
뷰바인딩을 사용하지 않는 초기화
val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rootView = inflater.inflate(R.layout.activity_main, null)
val binding = ActivityMainBinding.inflate(layoutInflater)
val rootView = binding.root
val dialogBinding = DialogInputBinding.inflate(layoutInflater) // dialog_input.xml 적용
AlertDialog.Builder(this).run {
setTitle("Title")
setView(dialogBinding.root)
show()
}