본문 바로가기
프로그래밍/App 개발

[Android] File Templates (Dialog)

by 엽기토기 2023. 11. 2.
반응형

2초만에 custom dialog 만드는 법

 

제가 쓰는 File Templates 를 소개합니다.

 

위치는

여기입니다.

 

'+' 눌러서, 원하는 template 이름을 입력합니다.

그리고

 

이렇게 적어줍시다.

 

그리고 template 코드 적는 란에 아래 코드를 복붙해주세요.

package ${PACKAGE_NAME};

import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import com.dreamfora.dreamfora.R
import com.dreamfora.dreamfora.databinding.${NAME}DialogBinding
import com.dreamfora.dreamfora.global.autoCleared
import com.dreamfora.dreamfora.global.onThrottleClick

#parse("File Header.java")
class ${NAME}Dialog : DialogFragment() {
    private var binding by autoCleared<${NAME}DialogBinding>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setStyle(STYLE_NORMAL, R.style.CustomDialogStyle)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = ${NAME}DialogBinding.inflate(inflater, container, false)
        dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        with(binding) {
            
        }
    }

    companion object {
        private const val dialogName = "${NAME}Dialog"
        
        fun show(fragmentManager: FragmentManager) {
            if (fragmentManager.findFragmentByTag(dialogName) != null) return
            fragmentManager.beginTransaction().add(${NAME}Dialog(), dialogName).commitAllowingStateLoss()
        }
    }
}

binding 과 style 은 쓰시는 코드에 맞게 바꿔주세요.

 

xml을 추가하기 위해 child template 을 생성해주세요.

 

file name에,

#set( $LAYOUT_FILE = $PACKAGE_NAME.replaceAll("\.", "/").replaceAll("\w+","\.\.").concat("/../res/layout/").concat($NAME.replaceAll("([a-z])([A-Z]+)", "$1_$2").toLowerCase().concat("_dialog")) )${LAYOUT_FILE}

이렇게 적어주세요

extension 은 xml 입니다.

 

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">

    <com.google.android.material.card.MaterialCardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardBackgroundColor="@color/bgDefault"
        app:cardCornerRadius="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="vertical">

        </LinearLayout>
    </com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>

 

저장 후에, file new 를 클릭해보면

 

 

방금 만든 template 이 보입니다.

 

클릭하면 방금 만든 dialog 가 바로 만들어집니다.

 

참쉽죠?

반응형