2010/04/28

[Android Dev.] Custom Dialog 생성하기

Custom Dialog 를 만들어보기위해 Android Developer 사이트의 예제(http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog)를 사용해 보았는데 에러가 발생하였다.

// Custom Dialog 생성 예제
Context mContext = getApplicationContext();
Dialog dialog = new Dialog( mContext );

dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");

TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource( R.drawable.icon );



에러 발생 화면

에러 발생 화면



이 문제가 발생한 것은 Dialog 생성시 생성자에 Context 를 넘겨 주도록 되어 있는데 예제에서는 getApplicationContext() 를 호출하여 Context를 가져와서 넘겨 주었는데 이 부분에 문제가 있어 보인다. Dialog 생성자 호출 부분을 this 로 넘겨주면 에러가 발생하지 않고 Dialog가 생성이 되었다.



Custom Dialog 생성에 사용한 xml layout 리소스

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:text="@+id/Button01"
android:id="@+id/Button01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
<TextView
android:text="@+id/TextView01"
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>



//Context mContext = getApplicationContext();
Dialog dialog = new Dialog( this );

dialog.setContentView( R.layout.mydialog );
dialog.setTitle( "MyDialog 1" );

Button btnMyDlg = (Button)dialog.findViewById( R.id.Button01 );
btnMyDlg.setText( "My Button on Custom Dialog" );

dialog.show();





Android 의 Dialog 는 Title 영역과 View 영역으로 나뉘어 지며 Title 영역은 Title 을 지정하지 않아도 사라지지 않고 자리를 차지 한다. 따라서 Titlte 을 지정하지 않을 경우 아래와 같이 아무것도 표시되지 않은 영역이 남아있다.

Title 을 지정하지 않는 Dialog

Title 을 지정하지 않는 Dialog



Title 이 필요없는 경우에는 AlertDialog 를 이용하여 Dialog 를 생성하는 것도 하나의 방법이다.<

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

No comments :

Post a Comment