City At Night

[Androi Studio] CustomDialog로 내가 원하는 팝업창 만들기! 본문

Android Studio

[Androi Studio] CustomDialog로 내가 원하는 팝업창 만들기!

Wuny 2021. 1. 24. 16:09
728x90
반응형

Custom Dialog는 팝업창에 또 하나의 레이아웃을 추가하여 보여주는 방식입니다.

그러므로 내가 원하는 기능 또는 디자인을 팝업창으로 보여줄 수 있는 장점이 있어 많이 사용합니다.

 

순서는 이렇습니다.

1. Custom Dialog의 Layout 작성.

2. Custom Dialog의 class를 작성.

3. MainActivity에서 마무리 작업( 다이어로그 띄우기, 다이어로그 밖 화면 어둡게 흐리게 하기)

 

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

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="344dp"
        android:layout_height="446dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.492"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.109">

        <TextView
            android:id="@+id/textView5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="160dp"
            android:text="Contents"
            android:gravity="center"
            android:textAlignment="center"
            android:textSize="25sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.033" />

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/constraintLayout"
            android:layout_width="342dp"
            android:layout_height="327dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.6"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView5"
            app:layout_constraintVertical_bias="0.0">

            <TextView
                android:id="@+id/txt_contents"
                android:layout_width="340dp"
                android:layout_height="330dp"
                android:text="TextView"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.0" />
        </androidx.constraintlayout.widget.ConstraintLayout>

        <Button
            android:id="@+id/btn_shutdown"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Done"
            android:onClick="shutDownClick"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/constraintLayout" />

    </androidx.constraintlayout.widget.ConstraintLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

  

  <CustomDialog.java>

public class CustomDialog extends Dialog {
    private TextView txt_contents;
    private Button shutdownClick;

    public CustomDialog(@NonNull Context context, String contents) {
        super(context);
        setContentView(R.layout.activity_custom_dialog);

        txt_contents = findViewById(R.id.txt_contents);
        txt_contents.setText(contents);
        shutdownClick = findViewById(R.id.btn_shutdown);
        shutdownClick.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

    }
}

 저는 Main에서 값을 넘겨주기 위해 contents의 값을 추가했습니다.

dismiss(); 는 버튼을 눌렀을시 창을 닫아주는 함수입니다.

  <MainActivity.java>

public class MainActivity extends AppCompatActivity {
    private CustomDialog customDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //다이얼로그 밖의 화면은 흐리게 만들어줌
       WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        layoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
        layoutParams.dimAmount = 0.8f;
        getWindow().setAttributes(layoutParams);
    }


    public void btnOnclick(View view) {
        switch (view.getId()){
            case R.id.button:
                customDialog = new CustomDialog(this,"다이어로그에 들어갈 내용입니다.");
                customDialog.show();
                break;

        }
    }
}

CustomDialog생성자의 두번째 파라미터값으로 아까 추가한 contents값입니다!. 저 안에 메세지를 전달하면 됩니다.

Alert Dialog는 Android에서 제공해주는것이기에 AlertDialog가 띄워지면 자동으로 밖의 화면은 어두워져 집중효과를 주지만  Custom Dialog는 말 그대로 처음부터 Custom을 하기에 코드를 넣어줘야 밖이 어두워지는 효과를 낼 수 있습니다.

728x90
반응형
Comments