[안드로이드] 사용자정의 다이얼로그(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를 이용하는 방법도 있습니다.
그 방법은 나중에 따로 포스팅하도록 하겠습니다.
'IT 개발 > 안드로이드개발' 카테고리의 다른 글
[안드로이드] 화면고정, 세로모드/가로모드 설정 (0) | 2018.10.05 |
---|---|
[안드로이드]커스텀 다이얼로그 - ClickListener와 Callback 사용하는 법 (0) | 2018.10.04 |
[안드로이드] px,dp,sp 크기단위 사용법 및 정리 (0) | 2018.10.02 |
[안드로이드] 안드로이드 형변환 정리 (0) | 2018.10.02 |
[안드로이드] 안드로이드 타이틀바, 상태바 없애기 (5) | 2018.09.28 |
[안드로이드] 핸드폰 MAC주소 확인하기 (1) | 2018.09.27 |
[안드로이드] SharedPreferences 사용법 및 예제 (4) | 2018.09.27 |
[안드로이드]실행중인 어플리케이션 목록에서 숨기는 방법 (0) | 2018.09.26 |