안드로이드(Android) AlertDialog.Builder 상속받아 화면 디자인 가능한 AlertDialog 만들기 |
환경 : Eclipse Mars, Android 4.2.2 |
AlertDialog 클래스는 안드로이드에서 제공하는 기본 다이얼로그 입니다. 그런데 팝업창을 디자인 하고 싶다면 어떻게 할까요? 보통 Dialog 클래스를 상속받아 사용자가 직접 만든 레이아웃으로 화면을 만듭니다. 이것처럼 AlertDialog 도 제목 부분과 메시지 부분의 분리해서 사용자가 직접 디자인 할수 있습니다. inflate 를 사용해서 View 위젯을 만든후 AlertDialog 에서 지원하는 setCustomTitle(), setView() 함수를 이용하는 것이죠.
▼ AlertDialog 를 자주 사용한다면 Builder 클래스를 따로 만들어서 사용하시는 것이 좋겠죠. 이렇게 AlertDialog.Builder 를 상속받아서 클래스를 만들게 되면 제목과 내용부분을 자신이 원하는 형태로 디자인 할수 있습니다. 아래 소스는 레이아웃 xml 만 있으면 View.inflate() 함수를 이용해서 View 객체를 만들수 있습니다. 이렇게 만든 View 들을 setCustomTitle(), setView() 의 인수로 넘깁니다. setCustomTitle() 은 제목에 해당하는 영역이며 setView() 는 본문입니다.
View customTitle = View.inflate(mContext, R.layout.alert_dlg_title, null); mTitle = (TextView) customTitle.findViewById(R.id.alertTitle); mIcon = (ImageView) customTitle.findViewById(R.id.icon); setCustomTitle(customTitle); View customMessage = View.inflate(mContext, R.layout.alert_dlg_message, null); mMessage = (TextView) customMessage.findViewById(R.id.message); setView(customMessage);
▼ AlertDialog.Builder 클래스를 상속받아서 만든 Builder 클래스의 전체 소스 입니다. 레이아웃에 제목값과 내용을 가져오기 위해서는 setTitle(), setMessage() 를 Override 하시면 됩니다.
import android.app.AlertDialog; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class CustomAlertDialogBuilder extends AlertDialog.Builder { private final Context mContext; private TextView mTitle; private ImageView mIcon; private TextView mMessage; public CustomAlertDialogBuilder(Context context) { super(context); mContext = context; View customTitle = View.inflate(mContext, R.layout.alert_dlg_title, null); mTitle = (TextView) customTitle.findViewById(R.id.alertTitle); mIcon = (ImageView) customTitle.findViewById(R.id.icon); setCustomTitle(customTitle); View customMessage = View.inflate(mContext, R.layout.alert_dlg_message, null); mMessage = (TextView) customMessage.findViewById(R.id.message); setView(customMessage); } @Override public CustomAlertDialogBuilder setTitle(int textResId) { mTitle.setText(textResId); return this; } @Override public CustomAlertDialogBuilder setTitle(CharSequence text) { mTitle.setText(text); return this; } @Override public CustomAlertDialogBuilder setMessage(int textResId) { mMessage.setText(textResId); return this; } @Override public CustomAlertDialogBuilder setMessage(CharSequence text) { mMessage.setText(text); return this; } @Override public CustomAlertDialogBuilder setIcon(int drawableResId) { mIcon.setImageResource(drawableResId); return this; } @Override public CustomAlertDialogBuilder setIcon(Drawable icon) { mIcon.setImageDrawable(icon); return this; } }
▼ 아래 XML 소스는 본문에 해당하는 화면 레이아웃 입니다. 내용이 많을수 있으므로 ScrollView 위젯을 넣어서 스크롤이 되도록 만들었습니다.
alert_dlg_message.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="2dip" android:paddingBottom="12dip" android:paddingLeft="14dip" android:paddingRight="10dip"> <TextView android:id="@+id/message" style="?android:attr/textAppearanceMedium" android:textColor="#888888" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dip" /> </ScrollView>
▼ 아래 XML 은 제목에 해당하는 화면 레이아웃 입니다. 제목부분을 다른 형태로 꾸미고 싶다면 이 부분을 고치시면 되겠죠.
alert_dlg_title.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/title_template" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:layout_marginTop="6dip" android:layout_marginBottom="9dip" android:layout_marginLeft="10dip" android:layout_marginRight="10dip"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:paddingTop="6dip" android:paddingRight="10dip" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/alertTitle" android:singleLine="true" android:ellipsize="end" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
▼ 아래 소스는 AlertDialog.Builder 클래스를 상속받아서 만든 Builder 클래스를 사용하고 있는 메인 Activity 전체 소스 입니다. new CustomAlertDialogBuilder 로 AlertDialog.Builder 를 생성하고 있습니다. 나머지 부분은 달라진 것이 없습니다.
import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class AlertDialogActivity extends Activity implements OnClickListener { final Context context = this; private Button button; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alert_dialog); button = (Button) findViewById(R.id.btn_alert); // 클릭 이벤트 button.setOnClickListener(this); } public void onClick(View v) { switch (v.getId()) { case R.id.btn_alert: AlertDialog.Builder alertDialogBuilder = new CustomAlertDialogBuilder(context); // 제목셋팅 alertDialogBuilder.setTitle("프로그램 안내"); // AlertDialog 셋팅 alertDialogBuilder .setMessage("공지사항 내용표현") .setCancelable(false) .setPositiveButton("종료", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int id) { // 프로그램을 종료한다 AlertDialogActivity.this.finish(); } }) .setNegativeButton("취소", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int id) { // 다이얼로그를 취소한다 dialog.cancel(); } }); // 다이얼로그 생성 AlertDialog alertDialog = alertDialogBuilder.create(); // 다이얼로그 보여주기 alertDialog.show(); break; default: break; } } }
'안드로이드 개발' 카테고리의 다른 글
안드로이드 개발 가로/세로 화면 전환할 때 배경화면 변경하는 방법 (0) | 2017.11.27 |
---|---|
안드로이드 개발 ViewHolder 패턴 이용해서 ListView 성능 향상하는 방법 (0) | 2017.11.22 |
안드로이드 폰캡 PhoneGap 설치방법, 기본 앱 만들어서 실행하는 방법 (1) | 2017.11.12 |
이클립스(Eclipse) 안드로이드 에뮬레이터 연결해서 실행하는 방법 (3) | 2016.11.17 |
안드로이드(Android) 자신이 가지고 있는 스마트폰 안드로이드 버전 알아내는 방법 (0) | 2015.05.30 |
안드로이드(Android) 스마트폰 가로, 세로 상태 알아내는 방법 (1) | 2015.05.28 |
안드로이드(Android) Genymotion 지니모션 이클립스에서 프로젝트 연결하는 방법 (1) | 2015.05.27 |
안드로이드(Android) Genymotion 지니모션 설치와 이클립스 플러그인 설치해서 연결 (1) | 2015.05.19 |