본문 바로가기
Android

안드로이드 커스텀 다이얼로그(Custom Dialog) 만들어보기.

by 일용직 코딩노동자 2020. 7. 8.
728x90
반응형

일반적인 다이얼로그는 밋밋한감이 있습니다.

 

다들 자기 입맛대로 꾸며보고싶으실텐데 생성자를 활용하여 커스텀 다이얼로그를 만들어볼게요.

 

대충 이런식으로 모서리가 살짝 둥글둥글한 녀석으로 만들어볼게용.

 

우선 MyDialog.java 라는 클래스를 만들어줬습니다..!

 

public class MyDialog extends Dialog {

    private Button Confirm;
    private Button Cancel;

    private View.OnClickListener Confirm_Btn;
    private View.OnClickListener Cancel_Btn;

    public TextView Body;
    public TextView Title;

    public String title;
    public String body;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //다이얼로그의 꼭짓점이 짤리는부분 방지.
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        setContentView(R.layout.mydialog);

        Confirm=(Button)findViewById(R.id.Confirm);
        Cancel=(Button)findViewById(R.id.Cancel);

        Title = findViewById(R.id.title);
        Body = findViewById(R.id.body);

        Confirm.setOnClickListener(Confirm_Btn);
        Cancel.setOnClickListener(Cancel_Btn);

		//타이틀과 바디의 글씨 재셋팅
        Title.setText(this.title);
        Body.setText(this.body);
    }

    public MyDialog(@NonNull Context context, View.OnClickListener Confirm_Btn, View.OnClickListener Cancel_Btn,String title, String body) {
        super(context);
        //생성자에서 리스너 및 텍스트 초기화
        this.Confirm_Btn = Confirm_Btn;
        this.Cancel_Btn = Cancel_Btn;
        this.title = title;
        this.body = body;
    }
}

그리고 mydiaog.xml 파일 정의해줍니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/radius"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="20dp"
                android:layout_marginTop="10dp"
                android:text="알 림"
                android:textColor="#000000"
                android:id="@+id/title"
                android:textSize="20dp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="20dp"
                android:text="test"
                android:textColor="#000000"
                android:id="@+id/body"
                android:textSize="20dp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:weightSum="100">

            <Button
                android:id="@+id/Confirm"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="50"
                android:background="@null"
                android:textColor="#000000"
                android:text="확인" />

            <Button
                android:id="@+id/Cancel"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="50"
                android:textColor="#000000"
                android:background="@null"
                android:text="취소" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

그리고 모서리가 둥근녀석을 만들기위해

 

여기에서 새로운 파일 하나 만들어줄게요.

 

여기서 저는 radius라는 파일을 하나 만들었슴다.

 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#8E7988"/>
    <corners android:radius="20dp"/>
</shape>

여기서 색상을 원하시는 색상으로 조절하시고

 

radius값을 조정하여 라운딩의 정도를 조절해보세요.

 

그리고 메인은 별게없습니다.

 

public class MainActivity extends AppCompatActivity {

    private MyDialog Dialog_Listener;

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

        Dialog_Listener = new MyDialog(this,Confirm,Cancel,"경 고","테스트중");
        Dialog_Listener.show();
    }

    private View.OnClickListener Confirm = new View.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "확인버튼",Toast.LENGTH_SHORT).show();
            Dialog_Listener.dismiss();
        }
    };

    private View.OnClickListener Cancel = new View.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "취소버튼.",Toast.LENGTH_SHORT).show();
            Dialog_Listener.dismiss();
        }
    };
}

메인에서 셋팅한대로 나왔어요!

728x90
반응형

댓글