2010/04/15

[Android Dev.]AlertDialog 활용하기

AlertDialog 는 사용자에게 메세지나 경고를 알리기 위한 기능으로 Android 에서 지원하는 Dialog 이다. Toast 와는 다르게 Dialog 라서 Activity의 Focus를 가져간다.



대부분의 Dialog 는 Activity의 onCreateDialog() 함수에서 생성하는 것을 권장하고 있다. onCreateDialog() 에서 생성된 Dialog 는 Activity 에서 관장하고 있으며 Activity 객체들()을 상속 받는다.

showDialog() 가 호출되면 생성되지 않은 Dialog의 경우 onCreateDialog() 함수에서 생성이 되고 이후에 호출이 되어질 때에는 새로 생성하지 않고 기존 인스턴스를 그대로 이용한다. 다이얼로그가 호출되기 전에 Dialog 에 변화를 주려면 onPrepareDialog() 함수에서 처리 한다. onCreateDialog 에서 생성한 Dialog는 Activity 에서 항상 갖고 있는 객체로 더이상 필요가 없을 경우에는 시스템 시소스 확보를 위해 removeDialog() 를 호출하여 제거해 주는 것이 좋다.



간단하게 사용자에게 경고를 하기 위한 Dialog 라면 시스템이 관리하지 않고 그냥 간단하게 사용하는 것이 리소스 관리 측면에서 더 유용해 보인다.



AlertDialog 는 사용자에게 아주 간단하고 쉽게 경고 메세지를 보여 줄 수 있는 Dialog 이다. 하지만 Custom View 까지 지원하여 아주 많은 것을 표현해 줄 수 있다.



AlertDialog 는 아래의 요소를 갖을 수 있다.


  • Icon

  • Title

  • Message or ListView (두가지를 함께 지원하지 않음)


  • Custom View

  • Button (최대 3개)




Message 를 갖는 AlertDialog

Message 를 갖는 AlertDialog

ListView 를 갖는 AlertDialog

ListView 를 갖는 AlertDialog




AlertDialog 가 갖을 수 있는 모든 요소는 필요 요소가 없다. 모든 요소를 제거하고 AlertDialog 를 호출하면 Activity의 Focus를 가져오고 화면에는 아무것도 표시가 되지 않는다.



AlertDialog 를 생성하는 방법은 AlertDialog.Builder 클래스를 이용하면 된다.



아주 간단한 AlertDialog 생성하기

간단한 AlertDialog

간단한 AlertDialog



AlertDialog alert = new AlertDialog.Builder( this )
.setIcon( R.drawable.icon )
.setTitle( "AlertTitle" )
.setMessage( "AlertMessage" )
.setPositiveButton( "OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
})
.show();





구성 요소중 Icon 과 Title 을 없애면 두 영역이 사라지지만 Icon 없이 Title 을 지정하면 기본 Icon 이 표시된다.


Icon과 Title을 제거한 AlertDialog

Icon과 Title을 제거한 AlertDialog

Icon 없이 Title 만 지정한 AlertDialog

Icon 없이 Title 만 지정한 AlertDialog






AlertDialog 에서 제공하는 ListView 활용하기

AlertDialog.Builder 에 있는 setSingleChoiceItems 함수를 이용하며 AlertDialog 에서 제공하는 ListView 를 사용할 수 있다.

ListView를 갖는 AlertDialog

ListView를 갖는 AlertDialog



String[] strItems = { "Alert Item 1", "Alert Item 2", "Alert Item 3" };

AlertDialog alert = new AlertDialog.Builder( this )
.setIcon( R.drawable.icon )
.setTitle( "AlertTitle" )
.setPositiveButton( "OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
})
.setNeutralButton( "Neutral", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{

}
})
.setNegativeButton( "Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{

}
})
.setSingleChoiceItems(strItems, -1, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String msg = "";
switch ( which )
{
case 0: msg = "Item 1 Selected"; break;
case 1: msg = "Item 2 Selected"; break;
case 2: msg = "Item 3 Selected"; break;
}
Toast.makeText( MyDialog.this, msg, Toast.LENGTH_SHORT ).show();
}
})
.show();







Custom View 를 얹은 AlertDialog

Custom View 를 얹은 AlertDialog

Custom View 를 얹은 AlertDialog



Custom View XML

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TableRow>
<ImageView
android:id="@+id/IVIcon1"
android:src="@drawable/icon"
/>
<TextView
android:id="@+id/TVAndroid1"
android:text="Android 1"
/>
</TableRow>

<TableRow>
<ImageView
android:id="@+id/IVIcon1"
android:src="@drawable/icon"
/>
<TextView
android:id="@+id/TVAndroid1"
android:text="Android 1"
/>
</TableRow>
</TableLayout>



LayoutInflater layout2 = getLayoutInflater();
View v2 = layout2.inflate( R.layout.alert_custom_view, null );

AlertDialog alert = new AlertDialog.Builder( this )
.setIcon( R.drawable.icon )
.setTitle( "AlertTitle" )
.setMessage( "AlertMessage" )
.setPositiveButton( "OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
})
.setNeutralButton( "Neutral", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{

}
})
.setNegativeButton( "Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{

}
})
.setView( v2 )
.show();





<

Original Post : http://neodreamer-dev.tistory.com/411

No comments :

Post a Comment