일반적인 다이얼로그로 AlertDailog가 있습니다.
하지만 AlertDialog는 타이틀, 메시지, 버튼으로만 구성할 수 있습니다.
그래서 사용자에 맞게 다이얼로그를 커스텀하여 만들어야 할때가 있습니다.
그럼 Custom Dialog (사용자 정의 다이얼로그)를 만들어 보겠습니다.
아래 영상은 커스텀 다이얼로그 사용 영상입니다.
커스텀 다이얼로그를 호출할 메인 액티비티 레이아웃 먼저 정의합니다.
* activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
    tools:context="com.studio572.customdialog.MainActivity">
    <LinearLayout
        android:gravity="center"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff">
    <TextView
        android:id="@+id/main_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Main Label"
        android:textSize="20dp"
        android:textColor="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button"
        android:layout_width="250dp"
        android:layout_height="60dp"
        android:text="Custom Dialog 호출"
        android:textColor="#000000"
        android:textSize="16dp"/>
    </LinearLayout>
</android.support.constraint.ConstraintLayout>
TextView의 main_label에 커스텀 다이얼로그에서 입력한 값이 출력됩니다.
Button의 button은 커스텀 다이얼로그 호출하는 버튼이 되겠습니다.
다음은 메인 액티비티 코드입니다.
* MainActivity.java
package com.studio572.customdialog;
import android.support.v4.media.session.PlaybackStateCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 // 커스텀 다이얼로그에서 입력한 메시지를 출력할 TextView 를 준비한다.
 final TextView main_label = (TextView) findViewById(R.id.main_label);
 // 커스텀 다이얼로그를 호출할 버튼을 정의한다.
 Button button = (Button) findViewById(R.id.button);
 // 커스텀 다이얼로그 호출할 클릭 이벤트 리스너 정의
 button.setOnClickListener(new View.OnClickListener() {
@Override
 public void onClick(View view) {
// 커스텀 다이얼로그를 생성한다. 사용자가 만든 클래스이다.
 CustomDialog customDialog = new CustomDialog(MainActivity.this);
 // 커스텀 다이얼로그를 호출한다.
 // 커스텀 다이얼로그의 결과를 출력할 TextView를 매개변수로 같이 넘겨준다.
 customDialog.callFunction(main_label);
 }
});
 }
}
다음은 커스텀 다이얼로그 레이아웃을 정의합니다.
원하는 디자인으로 정의하면 되겠습니다.
저는 간단하게 타이틀, 입력칸, 확인/취소 버튼으로 디자인 했습니다.
*custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="center"
        android:textColor="#ffffff"
        android:textSize="16dp"
        android:text="커스텀 다이얼로그"
        android:background="@color/colorAccent"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
    <EditText
        android:id="@+id/mesgase"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="center"
        android:textColor="#000000"
        android:textSize="16dp"
        android:hint="내용을 입력하세요."/>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/okButton"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="확인"
            android:textColor="#000000"
            android:textSize="16dp"
            android:background="#ffffff"/>
        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="#000000" />
        <Button
            android:id="@+id/cancelButton"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="취소"
            android:textColor="#000000"
            android:textSize="16dp"
            android:background="#ffffff"/>
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
</LinearLayout>
다음은 커스텀 다이얼로그의 java코드입니다.
* CustomDialog.java
package com.studio572.customdialog;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
/**
 * Created by Administrator on 2017-08-07.
 */
public class CustomDialog {
    private Context context;
    public CustomDialog(Context context) {
        this.context = context;
    }
    // 호출할 다이얼로그 함수를 정의한다.
    public void callFunction(final TextView main_label) {
        // 커스텀 다이얼로그를 정의하기위해 Dialog클래스를 생성한다.
        final Dialog dlg = new Dialog(context);
        // 액티비티의 타이틀바를 숨긴다.
        dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 커스텀 다이얼로그의 레이아웃을 설정한다.
        dlg.setContentView(R.layout.custom_dialog);
        // 커스텀 다이얼로그를 노출한다.
        dlg.show();
        // 커스텀 다이얼로그의 각 위젯들을 정의한다.
        final EditText message = (EditText) dlg.findViewById(R.id.mesgase);
        final Button okButton = (Button) dlg.findViewById(R.id.okButton);
        final Button cancelButton = (Button) dlg.findViewById(R.id.cancelButton);
        okButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // '확인' 버튼 클릭시 메인 액티비티에서 설정한 main_label에
                // 커스텀 다이얼로그에서 입력한 메시지를 대입한다.
                main_label.setText(message.getText().toString());
                Toast.makeText(context, "\"" +  message.getText().toString() + "\" 을 입력하였습니다.", Toast.LENGTH_SHORT).show();
                // 커스텀 다이얼로그를 종료한다.
                dlg.dismiss();
            }
        });
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "취소 했습니다.", Toast.LENGTH_SHORT).show();
                // 커스텀 다이얼로그를 종료한다.
                dlg.dismiss();
            }
        });
    }
}
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| [안드로이드] 쉐어드 프리퍼런스 저장/불러오기 (Shared Preference) (2) | 2017.08.13 | 
|---|---|
| [안드로이드] xml selector - 버튼 눌림(클릭) 효과 커스텀하여 만들기 (1) | 2017.08.12 | 
| [안드로이드] AutoCompleteTextView 자동완성 검색 기능 구현 (0) | 2017.08.11 | 
| [안드로이드] 리스트뷰 검색 기능 구현 (android ListView search) (15) | 2017.08.10 | 
| [안드로이드] ListView paging ( 리스트뷰 스크롤이 맨 하단으로 갔을 때 페이징 )처리 (0) | 2017.08.08 | 
 
			
			 
				
			
댓글