본문 바로가기
IT 개발/안드로이드개발

[안드로이드] 사용자정의 다이얼로그(custom dialog) 만드는 방법

by 만능이되고픈 잡캐 2018. 9. 30.

[안드로이드] 사용자정의 다이얼로그(custom dialog) 만드는 방법

 

앱 개발을 하다보면 기본으로 제공해주는 다이얼로그 말고 내가 원하는 방식의 다이얼로그를 만들어야 할 때가 상당히 많습니다. 그래서 이번엔 Custom dialog를 만드는 방법을 알아보도록 하겠습니다.

간단하게 설명하자면 이렇습니다. Dialog를 상속받는 클래스, 매칭되는 Layout을 만든 후에 class에서 이벤트리스너를 만들어주어 MainActivity에서 그 이벤트리스너를 호출하여 이벤트가 발생하였을 때 MainActivity에서 원하는 동작을 수행할 수 있도록 해주는 것입니다.

 

(동영상에 나와있는 main 화면은 이전에 작업하던 소스코드가 남아있어서 그런 것이니 신경쓰지 않으셔도 괜찮습니다.)

 

 


 

 

[MainActivity.java]

public class MainActivity extends AppCompatActivity {      private CustomDialog customDialog;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          //파라미터에 리스너 등록         customDialog = new CustomDialog(this,positiveListener,negativeListener);         customDialog.show();      }      private View.OnClickListener positiveListener = new View.OnClickListener() {         public void onClick(View v) {             Toast.makeText(getApplicationContext(), "확인버튼이 눌렸습니다.",Toast.LENGTH_SHORT).show();             customDialog.dismiss();         }     };      private View.OnClickListener negativeListener = new View.OnClickListener() {         public void onClick(View v) {             Toast.makeText(getApplicationContext(), "취소버튼이 눌렸습니다.",Toast.LENGTH_SHORT).show();             customDialog.dismiss();         }     }; }

 

 

[CustomDialog.java]

public class CustomDialog extends Dialog {      private Button mPositiveButton;     private Button mNegativeButton;      private View.OnClickListener mPositiveListener;     private View.OnClickListener mNegativeListener;       @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          //다이얼로그 밖의 화면은 흐리게 만들어줌         WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();         layoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;         layoutParams.dimAmount = 0.8f;         getWindow().setAttributes(layoutParams);          setContentView(R.layout.custom_dialog);          //셋팅         mPositiveButton=(Button)findViewById(R.id.pbutton);         mNegativeButton=(Button)findViewById(R.id.nbutton);          //클릭 리스너 셋팅 (클릭버튼이 동작하도록 만들어줌.)         mPositiveButton.setOnClickListener(mPositiveListener);         mNegativeButton.setOnClickListener(mNegativeListener);     }      //생성자 생성     public CustomDialog(@NonNull Context context, View.OnClickListener positiveListener, View.OnClickListener negativeListener) {         super(context);         this.mPositiveListener = positiveListener;         this.mNegativeListener = negativeListener;     } }

 

 

[custom_dialog.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="match_parent"         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:text="커스텀 다이얼로그 생성하는 방법"             android:textSize="20dp" />          <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_marginBottom="20dp"             android:text="용병콕 - 무한도전"             android:textSize="20dp" />     </LinearLayout>      <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:weightSum="100">          <Button             android:id="@+id/pbutton"             android:layout_width="0dp"             android:layout_height="wrap_content"             android:layout_weight="50"             android:text="확인" />          <Button             android:id="@+id/nbutton"             android:layout_width="0dp"             android:layout_height="wrap_content"             android:layout_weight="50"             android:text="취소" />     </LinearLayout> </LinearLayout> 
 

 
[구현이미지]
 

 

 

[구현영상]

 

 

 

이렇게 간단하게 커스텀 다이얼로그를 생성하는 방법에 대해 알아보았습니다. 

좀 더 다이얼로그에 많은 정보를 담고 그 정보를 MainAcitivity에서 다루고 싶다면 interface를 이용하는 방법도 있습니다.

그 방법은 나중에 따로 포스팅하도록 하겠습니다.