경험의 기록

위와 같이 특정 형태의 액티비티를 팝업창으로 띄우기 위해서는 Dialog를 커스텀하거나

테마를 dialog로 바꿔야한다.

 


1️⃣ Custom Dialog

레이아웃 만들기

 

사용하고 싶은 형태의 레이아웃을 하나 만들어준다.

 

클래스 생성

class CustomDialog(context: Context, Interface: CustomDialogInterface) : Dialog(context) {

    // 액티비티에서 인터페이스를 받아옴
    private var customDialogInterface: CustomDialogInterface = Interface

    private lateinit var addButton : Button
    private lateinit var cancelButton : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_custom)

        addButton = findViewById(R.id.add_btn)
        cancelButton = findViewById(R.id.cancel_btn)

        // 배경을 투명하게함
        window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

        // 추가 버튼 클릭 시 onAddButtonClicked 호출 후 종료
        addButton.setOnClickListener {
            customDialogInterface.onAddButtonClicked()
            dismiss()}

        // 취소 버튼 클릭 시 onCancelButtonClicked 호출 후 종료
        cancelButton.setOnClickListener {
            customDialogInterface.onCancelButtonClicked()
            dismiss()}
    }
}

클래스를 생성하여 배경을 투명하게하고 버튼에 따른 메소드를 작성해준다.

팝업을 띄운 액티비티에서 팝업창에 대한 정보를 처리하기 위해 인터페이스를 사용하는데,

별도로 처리하지않고 팝업창에서만 작업이 필요할 경우 인터페이스를 작성하지 않아도 된다.

 

인터페이스 작성

interface CustomDialogInterface {
    fun onAddButtonClicked()

    fun onCancelButtonClicked()
}

 사용하고자 하는 메소드를 작성해준다.

 

띄우고자 하는 액티비티에서

class MainActivity : AppCompatActivity(), CustomDialogInterface

인터페이스를 상속받고

 

val customDialog = CustomDialog(this,this)
        customDialog.show()

아까 만들어준 클래스로 생성하여 자기자신을 넘겨준다.

 

override fun onAddButtonClicked() {
        Toast.makeText(this, "추가", Toast.LENGTH_SHORT).show()
    }

    override fun onCancelButtonClicked() {
        Toast.makeText(this, "취소", Toast.LENGTH_SHORT).show()
    }

그리고 인터페이스에 대한 메소드를 구현한다.

 

 

 

2️⃣ Theme 활용하기

또한 테마를 일부 수정하여 액티비티를 팝업창으로 띄울 수 있다.

 

<activity android:name=".dialog.UpdateActivity"
            android:theme="@style/Theme.AppCompat.DayNight.Dialog"></activity>

팝업으로 사용하고자 하는 액티비티의 테마를

매니페스트에서  Theme.AppCompat.DayNight.Dialog 으로 바꿔준다.

 

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

그 후 onCreate에서 setContentView 전에 실행해주면 타이틀이 없는 다이얼로그 창으로 띄울 수 있다.

 

 

참조

https://www.youtube.com/watch?v=vjc59BFFqJw

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading