mojo's Blog

대화상자 본문

Android

대화상자

_mojo_ 2021. 8. 30. 14:44

대화상자(dialog)는 화면에 메시지를 나타낸 후 확인이나 취소 같은 사용자의 선택을 받아들이는 경우에 사용한다.

토스트보다 좀 더 강력한 메시지를 보낼 때 적당하다.

 

대화상자를 만드는 과정은 3단계로 다음과 같다.

 

1. 대화상자 생성 => AlertDialog.Builder 클래스로 생성

2. 용도에 따른 설정 => setTitle(), setMessage(), ... 

3. 대화상자 화면 출력 => show()

 

activity_main.xml Code

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:gravity="center_horizontal">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn1"
        android:text="대화상자"/>


</LinearLayout>

 

Java Code

 

public class MainActivity extends Activity {

    Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("연습하기");

        btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                dlg.setTitle("제목입니다");
                dlg.setMessage("이곳이 내용입니다");
                dlg.setIcon(R.mipmap.ic_launcher);
                dlg.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(getApplicationContext(),"확인을 클릭했네요", Toast.LENGTH_SHORT).show();
                    }
                });
                dlg.show();
            }
        });


    }

}

 

 

대화상자에 리스트 형태의 목록을 출력하고 그중 하나를 선택하게 할 수 있다.

 

Java Code

 

public class MainActivity extends Activity {

    Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("연습하기");

        btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String[] versionArray = {"고양이","토끼","라이언"};
                AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                dlg.setTitle("좋아하는 동물은?");
                dlg.setIcon(R.mipmap.ic_launcher);
                dlg.setItems(versionArray, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        btn1.setText(versionArray[i]);
                    }
                });
                dlg.setPositiveButton("확인", null);
                dlg.show();
            }
        });


    }

}

 

 

 

라디오버튼과 같은 형태로 구현할 수 있다. => setSingleChoiceItems() 메소드를 이용

 

dlg.setSingleChoiceItems(versionArray, 0, new DialogInterface.OnClickListener() {
	@Override
    public void onClick(DialogInterface dialogInterface, int i) {
    	btn1.setText(versionArray[i]);
    }
});

 

여러 개를 동시에 선택하는 체크박스 형태로 구현할 수 있다. => setMultiChoiceItems() 메소드를 이용

 

final String[] versionArray = {"고양이","토끼","라이언"};
final boolean[] checkArray = {true, false, false};
AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
dlg.setTitle("좋아하는 동물은?");
dlg.setIcon(R.mipmap.ic_launcher);
dlg.setMultiChoiceItems(versionArray, checkArray, new DialogInterface.OnMultiChoiceClickListener() {
@Override
	public void onClick(DialogInterface dialogInterface, int i, boolean b) {
    	btn1.setText(versionArray[i]);
    }
});
dlg.setPositiveButton("확인", null);
dlg.show();

 

 

연습 ) 사용자 정보 입력 앱 만들어 보기

 

취소 버튼을 클릭할 경우

 

activity_main.xml Code

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:padding="10dp"
    android:gravity="center_horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사용자 이름"
        android:layout_margin="5dp"
        android:id="@+id/text1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사용자 이메일"
        android:layout_margin="5dp"
        android:id="@+id/text2"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="여기를 클릭"
        android:layout_margin="5dp"
        android:id="@+id/btn1"/>

</LinearLayout>

 

dialog1.xml Code

 

<?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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사용자 이름"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="이름을 입력하세요"
        android:id="@+id/dlgEdt1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사용자 이메일"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="이메일을 입력하세요"
        android:id="@+id/dlgEdt2"/>

</LinearLayout>

 

toast1.xml Code

 

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

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/lion"
        android:scaleType="fitXY"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="   TextView   "
        android:id="@+id/toastTxt"
        android:textSize="20dp"/>

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/lion"
        android:scaleType="fitXY"/>

</LinearLayout>

 

Java Code

 

public class MainActivity extends Activity {

    TextView text1, text2, toastText;
    Button btn;
    EditText dlgEdt1, dlgEdt2;
    View dialogView, toastView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("연습하기");

        text1 = (TextView)findViewById(R.id.text1);
        text2 = (TextView)findViewById(R.id.text2);
        btn = (Button)findViewById(R.id.btn1);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialogView = (View)View.inflate(MainActivity.this, R.layout.dialog1, null);
                AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                dlg.setTitle("사용자 정보 입력");
                dlg.setIcon(R.drawable.rabbit);
                dlg.setView(dialogView);
                dlg.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dlgEdt1 = (EditText)dialogView.findViewById(R.id.dlgEdt1);
                        dlgEdt2 = (EditText)dialogView.findViewById(R.id.dlgEdt2);
                        text1.setText(dlgEdt1.getText().toString());
                        text2.setText(dlgEdt2.getText().toString());
                    }
                });
                dlg.setNegativeButton("취소", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast toast = new Toast(MainActivity.this);
                        toastView = (View)View.inflate(MainActivity.this,R.layout.toast1, null);
                        toastText = (TextView)toastView.findViewById(R.id.toastTxt);
                        toastText.setText("   취소했습니다   ");
                        toast.setView(toastView);
                        toast.show();
                    }
                });
                dlg.show();
            }
        });
    }

}

 

'Android' 카테고리의 다른 글

파일 처리 및 응용  (0) 2021.08.31
안드로이드 프로그래밍 제 7장 연습문제 (4, 5, 6번)  (0) 2021.08.30
메뉴  (0) 2021.08.30
안드로이드 프로그래밍 제 6장 연습문제 6번  (0) 2021.08.29
View Container  (0) 2021.08.29
Comments