[Android/Kotlin] Custom Dialog (팝업)

2024. 2. 21. 16:35·App&Web/Android

이렇게 내가 원하는 형태로 다이얼로그를 변경하고 싶으면 custom dialog를 사용하면 된다.

 

 

1. 원하는 Dialog (팝업) xml을 layout에서 만든다.

fragment_dialog_letter.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">

    <ImageView
        android:id="@+id/imageView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/img_dialog" />

    <ImageView
        android:id="@+id/okBtn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="27dp"
        app:layout_constraintEnd_toEndOf="@+id/imageView8"
        app:layout_constraintStart_toStartOf="@+id/imageView8"
        app:layout_constraintTop_toBottomOf="@+id/contentTv"
        app:srcCompat="@drawable/img_ok_button3" />

    <TextView
        android:id="@+id/titleTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="TextView"
        android:textAlignment="center"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="@+id/imageView8"
        app:layout_constraintStart_toStartOf="@+id/imageView8"
        app:layout_constraintTop_toTopOf="@+id/imageView8" />

    <TextView
        android:id="@+id/contentTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="14dp"
        android:text="TextView"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="@+id/imageView8"
        app:layout_constraintStart_toStartOf="@+id/imageView8"
        app:layout_constraintTop_toBottomOf="@+id/titleTv" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

2. 클릭 시 보여질 Dialog (팝업) fragment를 만든다.

DialogLetterFragment.kt

import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import android.view.Window
import com.umc.anddeul.databinding.FragmentDialogLetterBinding

class DialogLetterFragment(private val context: Context) {
    private lateinit var binding: FragmentDialogLetterBinding	// 뷰바인딩
    private val dlg = Dialog(context)

    fun show(){	
        binding = FragmentDialogLetterBinding.inflate(LayoutInflater.from(context))

        // 기본 설정
        dlg.requestWindowFeature(Window.FEATURE_NO_TITLE)	// 제목 없음
        dlg.setContentView(binding.root)	// 해당 뷰 바인딩을 적용
        dlg.setCancelable(true)	// 취소 허용
        dlg.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))	// 배경 없애기

        dlg.setCanceledOnTouchOutside(true)	// 밖에 클릭해도 dialog 사라짐

		// 원하는 텍스트 적용
        binding.titleTv.text = "이미 편지를 적은 경우\n녹음할 수 없습니다."
        binding.contentTv.text = "녹음 편지를 작성하고 싶으시다면,\n내용을 지워주세요"

        // 확인 버튼
        binding.okBtn3.setOnClickListener {
            dlg.dismiss()	// 클릭 시 dialog 사라짐
        }

        dlg.show()	// dialog 보이게 함
    }
}

 

 

 

3. 기존 fragment에 dialog 보일 코드 추가

MyFragment.kt

val dialogFragment = DialogLetterFragment(requireContext())
dialogFragment.show()

 

 

 

4. 변수도 전달하고 싶을 경우

DialogLetterFragment.kt

fun show(name: String){
	//// (생략)
}

 

MyFragment.kt

val dialogFragment = DialogLetterFragment(requireContext())
dialogFragment.show("Anna")

'App&Web > Android' 카테고리의 다른 글

[Android/Kotlin] 음성 재생/일시정지  (0) 2024.02.21
[Android/Kotlin] 카카오 로그인/회원가입  (0) 2024.02.21
[Android/Kotlin] 주간 달력 만들기  (0) 2024.02.21
[Android/Kotlin] fragment에서 fragment로 이동  (0) 2024.02.21
[Android/Kotlin] 안드로이드 spinner(스피너) 배경색 적용  (0) 2024.02.21
'App&Web/Android' 카테고리의 다른 글
  • [Android/Kotlin] 음성 재생/일시정지
  • [Android/Kotlin] 카카오 로그인/회원가입
  • [Android/Kotlin] 주간 달력 만들기
  • [Android/Kotlin] fragment에서 fragment로 이동
2월2
2월2
  • 2월2
    서벅돌의 성장일기
    2월2
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • TIL (2)
      • Server (28)
        • spring (7)
        • node.js (16)
        • 기타 (5)
      • App&Web (17)
        • Web (1)
        • Android (16)
        • iOS (0)
      • 공부 (59)
        • 깃&깃허브 (3)
        • 파이썬 (17)
        • 유니티 (4)
        • 자료구조 | 알고리즘 (15)
        • 자바 (3)
        • 운영체제 (8)
        • AI와 데이터 (9)
      • 대외활동 (12)
        • NPC 동아리 (1)
        • UMC 동아리 (11)
      • 대학교 (1)
        • 교직 (1)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글 관리
  • 링크

  • 공지사항

    • Notice
  • 인기 글

  • 태그

    Android
    코틀린
    C
    파이썬
    안드로이드
    자바
    유니티
    mysql
    Unity
    java
    Lua
    Python
    루아
    kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
2월2
[Android/Kotlin] Custom Dialog (팝업)
상단으로

티스토리툴바