Android 2011. 7. 18. 18:56
이번엔 팝업뷰 띄우기 입니다. 

팝업뷰는 딱히 그 뷰에서 복잡한걸 하기보다는  흔히 로그인 창이나,

비교적 간단한 정보등을 띄우고 닫는 그런 뷰입니다.

먼저 필요한 세가지를 선언합니다.

private LinearLayout detail_layout;
private PopupWindow pw;
private View pv; 

레이아웃과 팝업윈도우, 그리고 뷰가 필요합니다. 레이아웃은 꼭 리니어가 아니라도 현재 

팝업이 뜰 화면의 레이아웃이면 됩니다. 예를 들어 메인액티비티의 로그인화면을 띄운다면

메인페이지를 구성하는 xml 에서 제일 밖을 싸고있는 레이아웃을 지정합니다.

값을 대입해보면 

detail_layout = (LinearLayout)findViewById(R.id.detail_layout);
pv = View.inflate(getApplicationContext(), R.layout.webpopup, null);
pw = new PopupWindow(pv,400,400,false);

이렇게 됩니다. 레이아웃은 말씀드렸다시피 팝업창이 뜰 액티비티의 xml에 제일 밖을 싸고있는

레이아웃이고, pv에는 세가지 파라미터가 들어가는데 첫번째는 Context, 두번째는

팝업레이아웃, 세번째는 뷰그룹입니다.

두번째의 팝업레이아웃은, 팝업창의 레이아웃으로 팝업으로 뜰 화면을 xml로 만들어줘야합니다.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:id="@+id/linearLayout1"

android:layout_width="fill_parent" android:layout_height="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android">

<WebView android:id="@+id/webPopup" android:layout_width="wrap_content"

android:layout_height="wrap_content"></WebView>

</LinearLayout> 

그리고 그렇게 만든 view를 pw에 넣는데, pw에는  네가지 파라미터가 들어갑니다.

첫번째는 팝업으로 뜰 뷰, 두번째 세번째는 그 뷰의 가로 세로 사이즈, 마지막 네번째는 현재 팝업의

focusable 로 정확한 정보는 api를 뒤져봐야겠지만 개인적으로 써보니 이걸 true로 하면 포커스가 

안잡혀서 Back버튼에 dismiss() 걸어놔도 안꺼지더군요, false로 해놓으니 백키가 먹어서 꺼지네요

추가로 백버튼을 알아보면

public boolean onKeyDown(int keyCode, KeyEvent event){
	if(keyCode == KeyEvent.KEYCODE_BACK){
		pw.dismiss();
	}
	return true;
}
백 키를 오버라이딩하여 사용할 시에 저렇게 return true를 사용하면 팝업창만꺼지고

대신 팝업끈 후 뒤에 남은 액티비티는 백키로 꺼지지가 않습니다.

하지만 return super.onKeyDown(keyCode, event); 

이렇게 바꾸면 뒤에 액티비티가 꺼지지만 팝업뜬 상태에서 백키를 누를 시 

팝업꺼지고 뒤에 액티비티도 연달아 꺼져버립니다.. 그래서 불리언 값을 하나 놓고 

팝업이 떠있냐 안떠있냐를 체크하여 리턴값을 다르게 주었습니다.

private boolean popup_on;
public boolean onKeyDown(int keyCode, KeyEvent event){
		if(keyCode == KeyEvent.KEYCODE_BACK){
			try {
				popup_on = pw.isShowing();
				if(popup_on){
					pw.dismiss();
					popup_on = false;
				}else{
				  return super.onKeyDown(keyCode, event);
				}

			} catch (Exception e) {;}
		}
		return true;
	}

이렇게 하였습니다. 팝업이 뜨는 버튼리스너안에 저 popup_on 을 트루로 바꿔주면 됩니다.



posted by 젊은쎄오
: