Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(Android) Theme.dialog Activity 화면을 팝업(dialog) 만드는 방법

 

환경 : Eclipse Mars, Android 4.2.2

 

안드로이드에는 팝업창을 만들고 싶은 개발자들에게 다양한 방법을 제공하고 있습니다. 그 중 하나가 Custom Dialog 입니다. 안드로이드에서 제공하는 AlertDialog 외에 사용자가 화면 레이아웃을 직접 만들어서 팝업창을 띄울 수 있습니다. 두 가지 방법이 있는데, 그 중 한가지인 Activity 화면을 팝업 화면으로 사용하는 방법에 대해 소개하겠습니다. 


 

▼ 다이얼로그 클래스를 따로 만들어서 띄우지 않고 기존에 사용하던 Activity 팝업창으로 사용하고 싶다면 Theme.dialog 를 이용하는 것이 좋겠죠. 먼저 팝업창으로 사용할 Activity 를 하나 만듭니다. 장점은 화면 레이아웃을 자신이 원하는 형태로 쉽게 꾸밀수 있다는 것이죠. 그리고 기존 소스들을 쉽게 재사용 할 수 있겠죠. 단지 다이얼로그로 만들기 위해 윈도우 타이틀을 없애는 작업을 해야 합니다. 그래야 팝업처럼 보일 것이니까요. requestWindowFeature() Window.FEATURE_NO_TITLE 값을 넘기면 제목부분을 없앨수 있습니다.

 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;

public class DialogActivity extends Activity implements
		OnClickListener {

	private Button mConfirm, mCancel;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_dialog);

		setContent();
	}

	private void setContent() {
		mConfirm = (Button) findViewById(R.id.btnConfirm);
		mCancel = (Button) findViewById(R.id.btnCancel);

		mConfirm.setOnClickListener(this);
		mCancel.setOnClickListener(this);
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btnConfirm:
			this.finish();
			break;
		case R.id.btnCancel:
			this.finish();
			break;
		default:
			break;
		}
	}
}

 

 

 

▼ 아래는 팝업창으로 쓰일 Activity 의 화면 레이아웃 XML 입니다. 팝업창 처럼 버튼을 아래 위치 시키고 ProgressBar 위젯을 추가해서 ProgressDialog 같은 모양을 만들었습니다.

 

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dip"
    android:layout_height="200dip" >

    <TextView
        android:id="@+id/txtView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="Activity 팝업창"
        android:textSize="25sp" />

    <Button
        android:id="@+id/btnConfirm"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/btnCancel"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/btnCancel"
        android:text="취소" />

    <Button
        android:id="@+id/btnCancel"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="확인" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp" />

</RelativeLayout>

 

▼ 다음은 AndroidManifest.xml Activity 요소에 @android:style/Theme.Dialog 셋팅합니다. 이렇게 Dialog 테마를 적용하시면 팝업처럼 보이게 되는 것입니다.

 

<activity
    android:name=".DialogActivity"
    android:label="@string/title_activity_dialog" 
    android:theme="@android:style/Theme.Dialog">
</activity>

 

 

▼ 아래는 메인 Activity 소스 입니다. 버튼 클릭시 startActivity() 함수로 다른 Activity 를 이동하는 것처럼 사용하시면 됩니다. 단지 Theme.Dialog AndroidManifest.xml 에 있는 해당 Activity style 설정값을 바꾸시면 됩니다.

 

public class ActivityDialogActivity extends Activity implements
		OnClickListener {

	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_activity_dialog);

		button = (Button) findViewById(R.id.btn_alert);

		// 클릭 이벤트
		button.setOnClickListener(this);
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_alert:
			startActivity(new Intent(this, DialogActivity.class));
			break;

		default:
			break;
		}
	}
}


반응형
Posted by 녹두장군1
,