Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ButtonWithButton
- ArrayList
- textview
- firebase
- MaterialButton
- button
- Imageview
- 랜덤ID
- ROOM
- OutlinedButton
- nav_graph
- lifecyclescope
- firebasefunctions
- 코틀린
- Kotlin
- RealtimeDB
- EditText
- 안드로이드
- Activity
- FRAGMENT
- 안드로이드스튜디오
- Android
- Dialog
- 뷰바인딩
- androidstudio
- 밑줄
- 팝업액티비티
- ViewModel
- 안드로이드 스튜디오
- BottomSheetDialog
Archives
- Today
- Total
안드로이드 앱 개발
Custom Dialog 만들기 본문
1. 먼저 dialog의 xml 을 만들어준다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:listitem="@layout/rv_item_message_groups"
android:orientation="vertical"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/mainPink"
app:layout_constraintBottom_toTopOf="@+id/dialog_cancel_btn"
/>
<com.google.android.material.card.MaterialCardView
android:id="@+id/plus_cardview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
app:layout_constraintTop_toBottomOf="@+id/rv"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
app:srcCompat="@drawable/white_cross"
app:tint="@color/mainPink"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
2. Dialog.kt 클래스 생성
package com.example.today_seyebrowktver
import android.app.Dialog
import android.content.Context
import android.content.Context.INPUT_METHOD_SERVICE
import android.util.Log
import android.view.Window
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.ContextCompat.getSystemService
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
class DialogShowMessageGroup(context: Context) {
private val dlg = Dialog(context) //부모 액티비티의 context 가 들어감
private lateinit var addCardview : MaterialCardView
private lateinit var rv : RecyclerView
private var adapter: RvMessageGroupAdapter? = null
private lateinit var listener : MyDialogOKClickedListener
private lateinit var cancelListener : MyCancelClickedListener
fun start(context: Context, data: ArrayList<MessageGroupData>){
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE) //타이틀바 제거
dlg.setContentView(R.layout.dialog_show_messagegroup) //다이얼로그에 사용할 xml 파일을 불러옴
dlg.setCancelable(true) //다이얼로그의 바깥 화면을 눌렀을 때 다이얼로그가 닫히지 않도록 함
rv = dlg.findViewById(R.id.rv)
adapter = RvMessageGroupAdapter(data)
rv.layoutManager = LinearLayoutManager(context)
rv.adapter = adapter
addCardview = dlg.findViewById(R.id.plus_cardview)
addCardview.setOnClickListener {
dlg.dismiss()
}
dlg.setOnDismissListener {
val immhide = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
immhide.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
dlg.show()
}
private fun setData() {
}
fun setOnOKClickedListener(listener: (String) -> Unit) {
this.listener = object: MyDialogOKClickedListener {
override fun onOKClicked(content: String) {
listener(content)
}
}
}
fun setOnCanCelClickedListener(listener: (String) -> Unit){
this.cancelListener = object :MyCancelClickedListener{
override fun onCancelClicked(content: String) {
listener(content)
}
}
}
interface MyDialogOKClickedListener {
fun onOKClicked(content: String)
}
interface MyCancelClickedListener {
fun onCancelClicked(content: String)
}
}
3. 띄우고 싶은 액티비티에서 객체를 생성후 호출하기
val dlg = DialogShowMessageGroup(applicationContext)
dlg.start(applicationContext, messageGroupList)
'안드로이드앱' 카테고리의 다른 글
TextView에서 Italic을 사용했을 때 짤리는 현상 해결 방법 (0) | 2021.06.19 |
---|---|
Activity를 dialog로 팝업했을 때 창의 크기 컨트롤 (0) | 2021.06.19 |
Activty의 Stack 관리 - Kotlin (0) | 2021.05.31 |
뒤로가기 버튼을 눌렀을 때, 토스트 띄우고 앱 종료 - Java (0) | 2021.04.12 |
Room Library 사용 방법 1 - Kotlin (0) | 2021.03.31 |