Android
2011. 7. 18. 18:56
이번엔 팝업뷰 띄우기 입니다.
팝업뷰는 딱히 그 뷰에서 복잡한걸 하기보다는 흔히 로그인 창이나,
비교적 간단한 정보등을 띄우고 닫는 그런 뷰입니다.
먼저 필요한 세가지를 선언합니다.
레이아웃과 팝업윈도우, 그리고 뷰가 필요합니다. 레이아웃은 꼭 리니어가 아니라도 현재
팝업이 뜰 화면의 레이아웃이면 됩니다. 예를 들어 메인액티비티의 로그인화면을 띄운다면
메인페이지를 구성하는 xml 에서 제일 밖을 싸고있는 레이아웃을 지정합니다.
값을 대입해보면
이렇게 됩니다. 레이아웃은 말씀드렸다시피 팝업창이 뜰 액티비티의 xml에 제일 밖을 싸고있는
레이아웃이고, pv에는 세가지 파라미터가 들어가는데 첫번째는 Context, 두번째는
팝업레이아웃, 세번째는 뷰그룹입니다.
두번째의 팝업레이아웃은, 팝업창의 레이아웃으로 팝업으로 뜰 화면을 xml로 만들어줘야합니다.
그리고 그렇게 만든 view를 pw에 넣는데, pw에는 네가지 파라미터가 들어갑니다.
첫번째는 팝업으로 뜰 뷰, 두번째 세번째는 그 뷰의 가로 세로 사이즈, 마지막 네번째는 현재 팝업의
focusable 로 정확한 정보는 api를 뒤져봐야겠지만 개인적으로 써보니 이걸 true로 하면 포커스가
안잡혀서 Back버튼에 dismiss() 걸어놔도 안꺼지더군요, false로 해놓으니 백키가 먹어서 꺼지네요
대신 팝업끈 후 뒤에 남은 액티비티는 백키로 꺼지지가 않습니다.
하지만 return super.onKeyDown(keyCode, event);
이렇게 바꾸면 뒤에 액티비티가 꺼지지만 팝업뜬 상태에서 백키를 누를 시
팝업꺼지고 뒤에 액티비티도 연달아 꺼져버립니다.. 그래서 불리언 값을 하나 놓고
팝업이 떠있냐 안떠있냐를 체크하여 리턴값을 다르게 주었습니다.
팝업뷰는 딱히 그 뷰에서 복잡한걸 하기보다는 흔히 로그인 창이나,
비교적 간단한 정보등을 띄우고 닫는 그런 뷰입니다.
먼저 필요한 세가지를 선언합니다.
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 을 트루로 바꿔주면 됩니다.
'Android' 카테고리의 다른 글
안드로이드] trim(); 의 기능 (0) | 2011.07.20 |
---|---|
안드로이드] 팝업뷰 보다 깔끔한 팝업모양 액티비티 만들기 (14) | 2011.07.19 |
안드로이드] 현재 Activity 와 Context 얻는 방법 (6) | 2011.07.14 |
안드로이드] 현재 액티비티, 다른 액티비티 종료하기 (15) | 2011.06.27 |
안드로이드] 리스트 알아보기 (0) | 2011.06.25 |