안드로이드(android) 다이얼로그 종류별 구현 방법

 

개발환경 : JDK 1.5, eclipse-galileo, android GoogleAPI 2.1, window XP

 

(1) 여러 개의 멀티선택 옵션으로 표현해 주기

 

다중선택을 위한 다이얼로그 창을 띄운다. 리스트에는 제목과 radio button

이 있다. AlertDialog.Builder 클래스로 구현하며 리스트중 특정행을 클릭했을 때

이벤트는 setSingleChoiceItems 에 등록한다. Ok 버튼클릭 이벤트는

setPositiveButton , Cancel 버튼클릭 이벤트는 setNegativeButton 에 등록하고

기능을 구현하면 된다.


private void DialogSelectOption() {
	final String items[] = { "item1", "item2", "item3" };
	AlertDialog.Builder ab = new AlertDialog.Builder(DialogSample.this);
	ab.setTitle("Title");
	ab.setSingleChoiceItems(items, 0,
		new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int whichButton) {
			// 각 리스트를 선택했을때 
		}
		}).setPositiveButton("Ok",
		new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int whichButton) {
			// OK 버튼 클릭시 , 여기서 선택한 값을 메인 Activity 로 넘기면 된다.
		}
		}).setNegativeButton("Cancel",
		new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int whichButton) {
			// Cancel 버튼 클릭시
		}
		});
	ab.show();
}

 

(2) html 로 구현한 text 넣기

 

다이얼로그 창을 띄울 때 공지나 경고성 창이라면 내용이 들어갈것이다. 이 내용을

HTML 태그를 적용해 넣을 수가 있다. 색깔은 제대로 바뀌는 것 같은데 <strong>, <b>

등 글자에 대한 bold 처리가 한거나 안한거나 똑같이 보여서 제대로 표현되는지는

좀더 테스트 해봐야할것같다.

private void DialogHtmlView(){
AlertDialog.Builder ab=new AlertDialog.Builder(DialogSample.this);
 	ab.setMessage(Html.fromHtml(" " +
 		"Html 표현여부 " +"
HTML 이 제대로 표현되는지 본다.")); ab.setPositiveButton("ok", null); ab.show(); }

 

(3) 프로그레시브(Progress) 다이얼로그 구현

 

안드로이드에서 프로그레시브바를 구현할수 있다. 이것을 구현하기 위한 클래스는

ProgressDialog 를 사용해야 한다. 다이얼로그 창의 중지는 ProgressDialog

dismiss 를 쓰면된다.

private void DialogProgress(){
       ProgressDialog dialog = ProgressDialog.show(DialogSample.this, "",
		                "잠시만 기다려 주세요 ...", true);
      // 창을 내린다.
      // dialog.dismiss();
}
aaa

 

(4) Radio 버튼을 포함한 다중선택 다이얼로그 창

 

1번 예제와 비슷하게 Radio 버튼이 추가되어있는 다중선택 다이얼로그 창이다.

차이가 있다면 창 타이틀에 setIcon 을 써서 아이콘을 집어넣은것과

선택한 행 번호를 알아와 Toast 로 화면에 문자열을 표시해주는 내용이다.

창을 닫고 싶다면 onclick 함수에 넘어온 DialogInterface 객체로 cancel 함수를

호출해 닫으면 된다.

private void DialogRadio(){
final CharSequence[] PhoneModels = {"iPhone", "Nokia", "Android"};
        AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
        alt_bld.setIcon(R.drawable.icon);
        alt_bld.setTitle("Select a Phone Model");
        alt_bld.setSingleChoiceItems(PhoneModels, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), "Phone Model = "+PhoneModels[item], Toast.LENGTH_SHORT).show();
                // dialog.cancel();
            }
        });
        AlertDialog alert = alt_bld.create();
        alert.show();
}

 

(5) 선택에 따른 로직구현을 위한 다이얼로그 창 구현

 

예를 들어 Yes/No 중 하나를 선택함으로서 특정 기능을 구현해주고자 할 때

쓰일만한 예제이다. 샘플에서는 Yes/No 일때를 구분하여 코드를 구현할수

있도록 나누어져 있다. 우리가 흔히 보는 대표적인 다이얼로그 창일것이다.

private void DialogSimple(){
	AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
	alt_bld.setMessage("Do you want to close this window ?").setCancelable(
		false).setPositiveButton("Yes",
		new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int id) {
			// Action for 'Yes' Button
		}
		}).setNegativeButton("No",
		new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int id) {
			// Action for 'NO' Button
			dialog.cancel();
		}
		});
	AlertDialog alert = alt_bld.create();
	// Title for AlertDialog
	alert.setTitle("Title");
	// Icon for AlertDialog
	alert.setIcon(R.drawable.icon);
	alert.show();
}
aaaa

 

(6) Time Picker 시간선택 컨트롤을 다이얼로그에 구현

 

Time Picker 컨트롤을 다이얼로그 창에 구현한 예제이다. 그리고 다이얼로그에

구현되어있는 Time Picker 에서 선택한 값을 부모 화면에서 받아 그 값을 Toast

로 보여준다
private void DialogTimePicker(){
	TimePickerDialog.OnTimeSetListener mTimeSetListener = 
	new TimePickerDialog.OnTimeSetListener() {
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			Toast.makeText(DialogSample.this,
			"Time is=" + hourOfDay + ":" + minute, Toast.LENGTH_SHORT)
			.show();
		}
	};
	TimePickerDialog alert = new TimePickerDialog(this, 
mTimeSetListener, 0, 0, false);
	alert.show();
}

 

(7) Date Picker 날짜선택 컨트롤을 다이얼로그에 구현

 

Date Picker 컨트롤을 다이얼로그 창에 구현한 예제이다. 그리고 다이얼로그에

구현되어있는 Date Picker 에서 선택한 값을 부모 화면에서 받아 그 값을 Toast

로 보여준다. 창을 띄우기 전에 현재 날짜정보를 넘겨주고 Date Picker 에서는

그것을 받아 표시해 준다.

private void DialogDatePicker(){
    Calendar c = Calendar.getInstance();
    int cyear = c.get(Calendar.YEAR);
    int cmonth = c.get(Calendar.MONTH);
    int cday = c.get(Calendar.DAY_OF_MONTH);
	
    DatePickerDialog.OnDateSetListener mDateSetListener = 
	new DatePickerDialog.OnDateSetListener() {
	// onDateSet method
	public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
	     String date_selected = String.valueOf(monthOfYear+1)+
		     	" /"+String.valueOf(dayOfMonth)+" /"+String.valueOf(year);
	     Toast.makeText(DialogSample.this, 
		"Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
	}
     };
     DatePickerDialog alert = new DatePickerDialog(this,  mDateSetListener,  
     cyear, cmonth, cday);
     alert.show();
}
aaaa

 

(8) 전체 소스

 

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TimePicker;
import android.widget.Toast;

import com.sample.R;

public class DialogSample extends ListActivity {

	private String[] mMenuText;
	private String[] mMenuSummary;

	private String keyName = "name";
	private String keyDesc = "desc";
	private String TAG;
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		TAG = getClass().getName();

		int length = 7;
		mMenuText = new String[length];
		mMenuSummary = new String[length];

		mMenuText[0] = "다중선택 새창";
		mMenuSummary[0] = "다중선택을 할수 있는 Alert 예제구현이다.";
		mMenuText[1] = "HTML 적용 새창";
		mMenuSummary[1] = "Text 에 HTML 을 적용하는 Alert 예제구현이다.";
		mMenuText[2] = "프로그레시브바 새창";
		mMenuSummary[2] = "진행중을 나타내는 프로그레시브바 Alert 예제구현다.";
		mMenuText[3] = "Radio 버튼 새창";
		mMenuSummary[3] = "Radio 버튼이 들어간 새창 이며 선택하면 창이 닫힌다. ";
		mMenuText[4] = "Simple Dialog";
		mMenuSummary[4] = "선택에 따른 로직구현을 위한 다이얼로그 창 구현";
		mMenuText[5] = "Time Picker";
		mMenuSummary[5] = "Time Picker 시간선택 컨트롤을 다이얼로그에 구현";
		mMenuText[6] = "Date Picker";
		mMenuSummary[6] = "Date Picker 날짜선택 컨트롤을 다이얼로그에 구현";

		setListAdapter(new SimpleAdapter(this, getListValues(),
				android.R.layout.simple_list_item_2, new String[] { keyName,
						keyDesc }, new int[] { android.R.id.text1,
						android.R.id.text2 }));
	}

	private List> getListValues() {
		List> values = new ArrayList>();
		int length = mMenuText.length;
		for (int i = 0; i < length; i++) {
			Map v = new HashMap();
			v.put(keyName, mMenuText[i]);
			v.put(keyDesc, mMenuSummary[i]);
			values.add(v);
		}
		return values;
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		Log.d(TAG, "id : " + id + ", position : " + position);
		switch (position) {
		case 0:
			// 다중선택 옵션창 
			this.DialogSelectOption();
			break;
		case 1:
			// HTML 구현 
			this.DialogHtmlView();
			break;
		case 2:
			// 프로그레시브바 구현
			this.DialogProgress();
			break;
		case 3:
			//  Radio 버튼이 추가된 다중선택 창
			this.DialogRadio();
			break;
		case 4:
			// 가장 일반적인 Yes/NO기능구현 Dialog
			this.DialogSimple();
			break;
		case 5:
			this.DialogTimePicker();
			break;
		case 6:
			// 날짜 선택 Dialog 구현 
			this.DialogDatePicker();
			break;
		default:
			break;
		}
	}

	private void DialogSelectOption() {
		final String items[] = { "item1", "item2", "item3" };
		AlertDialog.Builder ab = new AlertDialog.Builder(DialogSample.this);
		ab.setTitle("Title");
		ab.setSingleChoiceItems(items, 0,
			new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					// 각 리스트를 선택했을때 
				}
			}).setPositiveButton("Ok",
			new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					// OK 버튼 클릭시 , 여기서 선택한 값을 메인 Activity 로 넘기면 된다.
				}
			}).setNegativeButton("Cancel",
			new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					// Cancel 버튼 클릭시
				}
			});
		ab.show();
	}
	
	private void DialogHtmlView(){
		AlertDialog.Builder ab=new AlertDialog.Builder(DialogSample.this);
 		ab.setMessage(Html.fromHtml(" " +
 				"Html 표현여부 " +"
HTML 이 제대로 표현되는지 본다.")); ab.setPositiveButton("ok", null); ab.show(); } private void DialogProgress(){ ProgressDialog dialog = ProgressDialog.show(DialogSample.this, "", "잠시만 기다려 주세요 ...", true); // 창을 내린다. // dialog.dismiss(); } private void DialogRadio(){ final CharSequence[] PhoneModels = {"iPhone", "Nokia", "Android"}; AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); alt_bld.setIcon(R.drawable.icon); alt_bld.setTitle("Select a Phone Model"); alt_bld.setSingleChoiceItems(PhoneModels, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), "Phone Model = "+PhoneModels[item], Toast.LENGTH_SHORT).show(); dialog.cancel(); } }); AlertDialog alert = alt_bld.create(); alert.show(); } private void DialogSimple(){ AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); alt_bld.setMessage("Do you want to close this window ?").setCancelable( false).setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Action for 'Yes' Button } }).setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Action for 'NO' Button dialog.cancel(); } }); AlertDialog alert = alt_bld.create(); // Title for AlertDialog alert.setTitle("Title"); // Icon for AlertDialog alert.setIcon(R.drawable.icon); alert.show(); } private void DialogTimePicker(){ TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Toast.makeText(DialogSample.this, "Time is=" + hourOfDay + ":" + minute, Toast.LENGTH_SHORT) .show(); } }; TimePickerDialog alert = new TimePickerDialog(this, mTimeSetListener, 0, 0, false); alert.show(); } private void DialogDatePicker(){ Calendar c = Calendar.getInstance(); int cyear = c.get(Calendar.YEAR); int cmonth = c.get(Calendar.MONTH); int cday = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { // onDateSet method public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { String date_selected = String.valueOf(monthOfYear+1)+ " /"+String.valueOf(dayOfMonth)+" /"+String.valueOf(year); Toast.makeText(DialogSample.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show(); } }; DatePickerDialog alert = new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday); alert.show(); } }

저작자 표시
Posted by 녹두장군

댓글을 달아 주세요

  1. ^^ 2010/08/09 16:16  댓글주소  수정/삭제  댓글쓰기

    제가 필요로 하던 정보가 다 모여 있네요><
    좋은 정보 고맙습니다. 담아갈게요~

  2. 제리 2010/08/10 16:56  댓글주소  수정/삭제  댓글쓰기

    안드로이드 공부중입니다. 좋은 자료인것 같아요.
    그런데. layout xml 파일도 같이 올려 주심 좋을 텐데... ㅋㅋ

    main.xml에서 ListView를 넣어주고 다른 xml에서 각 Row에 대한 두줄짜리 TextView를 넣는건 해 봤는데...
    소스를 보면 한 파일로 처리한것 같은 생각이 드는데 말이죠... ㅋㅋ

    • 녹두장군 2010/08/10 17:09  댓글주소  수정/삭제

      도움이 되었다니 기쁘네요..

      이 내용에는 onCreate 에 보시면 알겠지만
      xml 필요없이 레이아웃이 구성된것입니다.
      클래스만 실행하면 됩니다 ^^

  3. 제리 2010/08/10 18:31  댓글주소  수정/삭제  댓글쓰기

    네.. 감사합니다.
    그런데
    65, 66 라인이요...

    private List<MAP><STRING, string="">> getListValues() {

    List<MAP><STRING, string="">> values = new ArrayList<MAP><STRING, string="">>();

    오타가 섞인듯하고...

    MAP 클래스를 따로 만들어야 하는 건가요?

    전 JDK 1.6인데요... 바뀌면서 Generic이 에러가 나는건가...

    • 녹두장군 2010/08/10 19:48  댓글주소  수정/삭제

      네 코드를 보기 편하게 보여주는
      툴이 말썽이네요 .. String 문자열이 간혹 대분자로
      들어가요 ㅋ 바꿔줘도 수정하면 또 바껴있어서 저도
      못봤네요 감사합니다..

      String 으로 바꿔주면 됩니다 ^^

  4. 제리 2010/08/11 09:51  댓글주소  수정/삭제  댓글쓰기

    음... 계속 에러가 나길래 고쳐 보았습니다.

    65 , 66 라인 ========================================================================
    private List<MAP><STRING, String="">> getListValues() {
    List<MAP><STRING, String="">> values = new ArrayList<MAP><STRING, String="">>();


    ================>
    private ArrayList<HashMap<String, String>> getListValues() {
    ArrayList<HashMap<String,String>> values = new ArrayList<HashMap<String,String>>();

    으로 바꿨구요.

    69라인 =======================================================================
    Map<STRING, String=""> v = new HashMap<STRING, String="">();



    HashMap<String, String> v = new HashMap<String, String>();
    으로 고쳤습니다.

    잘 도네요..

    암튼 소스 감사합니다. 공부 많이 했어요 ... ㅋㅋ

  5. 열공안드로이드 2010/09/25 15:44  댓글주소  수정/삭제  댓글쓰기

    정말 좋은 강좌네요

    다이어로그 구현 때문에 고생 했었는데 이 강좌 보고 해결 했습니다.
    감사 합니다. ^^

  6. 열공안드로이드 2010/09/25 15:44  댓글주소  수정/삭제  댓글쓰기

    정말 좋은 강좌네요

    다이어로그 구현 때문에 고생 했었는데 이 강좌 보고 해결 했습니다.
    감사 합니다. ^^

    • 녹두장군 2010/09/26 09:52  댓글주소  수정/삭제

      도움이 되었다니 저도 뿌듯하네요.
      환절기 감기 조심하세요 ^^

  7. 와우 2010/11/16 16:21  댓글주소  수정/삭제  댓글쓰기

    굳!

    좋네요

  8. j2m 2011/01/01 14:05  댓글주소  수정/삭제  댓글쓰기

    링크 걸어 갑니다~!
    좋은 정보 감사합니다~~!! 복받으실 거에여~~~T^T

  9. 초연 2011/01/19 12:13  댓글주소  수정/삭제  댓글쓰기

    종류별로 참고하기 정말 좋게 되어있네요 ㅎㅎ
    저도 링크 걸어 갈께요~ 감사합니다~
    복받으실꺼에요~ :)

  10. Muze 2011/03/09 12:08  댓글주소  수정/삭제  댓글쓰기

    와, 잘보고갑니다
    이렇게 정리하는것도 실력인거같네요

    • 녹두장군 2011/03/11 09:23  댓글주소  수정/삭제

      감사합니다. ^^
      더욱도 노력하는 녹두가 되겠습니다.

      봄이네요 .. 하늘도 청명하고 한번쯤 먼 하늘을 바로보며
      다가올 미래의 즐거운 일들에 대한 상상을 해 보는것도
      좋을것 같네요

  11. 핑팬 2011/05/04 00:16  댓글주소  수정/삭제  댓글쓰기

    보기 편하게 정리를 잘하셨네요..
    공부하는데 도움이 될것같습니다.
    감사

  12. 지는방법좀 2011/08/19 10:01  댓글주소  수정/삭제  댓글쓰기

    정말 도움이 많이 됩니다 ^^

    실례지만...
    dialog에 시크바 적용법도
    올려주심 안될까요?ㅜㅜ

  13. EdanLee 2012/02/23 20:51  댓글주소  수정/삭제  댓글쓰기

    안드로이드스터디를 통해 오게됬는데 정말 유익한 자료내요! 정말 감사합니다!

  14. 서대석 2012/03/14 21:58  댓글주소  수정/삭제  댓글쓰기

    저는 다이얼로그에 버튼을 따로따로 하고 싶은 기능을 할 수 있도록 만들고 싶은데 그런 기능은 아쉽게 없네요 ㅠ

  15. 안정민 2013/03/15 10:32  댓글주소  수정/삭제  댓글쓰기

    아이구 감사합니다. 초보자에게 큰도움이 되었습니다.
    덕분에 다이얼로그에 대해서 많이 알아갑니다.

  16. 2013/05/05 00:36  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  17. 로딩중 2013/10/19 00:21  댓글주소  수정/삭제  댓글쓰기

    잘보고갑니다 ^^
    참고할께요!!

  18. mukuku 2014/09/15 15:38  댓글주소  수정/삭제  댓글쓰기

    으아 짱짱맨! 출처남기고 퍼가도될까여?

  19. 신입탈피 2014/10/07 21:14  댓글주소  수정/삭제  댓글쓰기

    녹두장군님~ 예제소스를 정말 깔끔하게 정리해주셨네요!
    알차게 잘 배우고 갑니다. ^^*



티스토리 툴바