올해는 머신러닝이다.
[펌]깔끔한 팝업창 만들어보기 본문
이번에 PopupWindow로 팝업창을 만들어서 사용 할 일이 있었는데 팝업뷰를 처음 써봐서
서투르기도 했겠지만, 굉장히 불안정하더군요 , 개인적으로..
예를들면 팝업뷰 xml 에 WebView를 추가하여 팝업에 웹페이지를 띄울라치면 뜨긴하지만
터치 조금만 하면 badtokenexception 을 뱉어내며 죽어버립니다. 정말 딱 팝업창처럼,
뜬거 보고 확인 후 닫기. 이 기능만 할 수 있더군요 .
그러다가 알게 된 것이 액티비티를 팝업창만하게 띄워서 좀 더 쓸만한 팝업창을 만드는걸
알게 되었습니다.
우선 액티비티이니 팝업창으로 쓸 액티비티를 만듭니다 .
public class WebDialog extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); setContentView(R.layout.webpopup); WebView webView = (WebView)findViewById(R.id.webPopup); webView.setWebViewClient(new myWebViewClient()); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(true); webView.loadUrl("http://www.google.com"); } class myWebViewClient extends WebViewClient { @Override
view.loadUrl(url); return true; } } public void onClick(View arg0) {
} }
requestWindowFeature(Window.FEATURE_NO_TITLE);
이 놈은 나중에 설명드리겠지만 매니페스트에 이 액티비티 테마를 다이얼로그 테마로 잡습니다.
다이얼로그 테마면 상단에 다이얼로그 제목바가 생기는데 이를 없애주는 명령어 입니다.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
두번째로 이것은 그냥 취향인데 이 팝업이 뜨면 뒷 배경이 블러 효과가 납니다. 뿌옇게 이쁘게..
무튼,해당 액티비티의 ContentView인 webPopup.xml(실질적인 팝업구성 xml입니다)을 보면
<RelativeLayout
android:layout_centerInParent="true"
android:layout_width="300dip"
android:layout_height="240dip"
android:background="#50FFFFFF">
<android.webkit.WebView android:layout_width="fill_parent"
android:id="@+id/webPopup"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true">
</android.webkit.WebView>
</RelativeLayout>보면 뭐 없습니다. 웹만 띄우기 때문에 웹뷰 하나 있습니다.
그리고 액티비티 이기 때문에 매니패스트에 등록을 해주어야 하는데요
<activity
android:name="net.oshelp.Info.WebDialog"
android:screenOrientation="landscape" android:theme="@android:style/Theme.Dialog"
android:windowSoftInputMode="stateHidden" android:configChanges="orientation|keyboardHidden">
</activity>
순서대로 액티비티명, 화면가로지정, 다이얼로그테마, 키보드 가리기, 가로세로전환시 키보드가리기
순서입니다. 중요한건 theme 정도가 있겠네요
이렇게 하고 이 팝업을 호출하는 곳에서 액티비티 부르듯
Intent intent = new Intent(detailView.this, WebDialog.class);
startActivity(intent);
이렇게 인텐트 시켜 버리면
이렇게 이쁜 팝업창이 뜹니다. 뒤에 블러효과 뭔지 아시겠죠?
이렇게 쓰면 배드토큰익셉션도 덜 날 뿐더러 액티비티 이므로 따로 백키를 오버라이딩해서
dismiss()로 꺼지게 해야할 필요없이 그냥 누르면 꺼집니다, 그리고 아까 만든
webDialog.java 에서 보면 액티비티를 상속받은 클래스이므로 여기다 터치리스너를 달던
클릭리스너를 달던 아무이상없이 잘되더군요. 앞으로 유용하게 사용 할 것 같습니다 ^^
'Android > Tip&Tech' 카테고리의 다른 글
[펌] Android Cookkie 와 Session 관련 (1) | 2011.09.08 |
---|---|
webview 에 배경화면 설정 (0) | 2011.09.07 |
[펌]e-book관련 Android 추천 소스 (0) | 2011.09.05 |
ViewFlipper 관련 예제(소스포함) (0) | 2011.09.05 |
[펌]구글맵스 유료화 살펴보기 (0) | 2011.09.02 |