'멜론카피'에 해당되는 글 1

  1. 2011.06.24 안드로이드 웹뷰 프로그래스바 android webview prograssbar wheel
2011. 6. 24. 16:46 안드로이드
웹뷰에 둥근모양의 prograssbar가 뜨는 예제다



public class Tab4 extends Activity {
    WebView web;
    Activity activity;
     final static String TAG = "TAB4";

     Dialog dialog;
     ProgressBar progress;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

     
        getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.tabfour_bg);

        web = (WebView) findViewById(R.id.tab4_webview);
        web.getSettings().setJavaScriptEnabled(true);
        web.setWebViewClient(new DraptWebViewClient());
        web.setWebChromeClient(new DraptWebChormeClient());
        web.loadUrl("http://m.naver.com/");
       
//스타일에 맞는 다일얼로그를 생성했다
        dialog = new Dialog(this,R.style.prograssdialog);       
        dialog.addContentView(
                new ProgressBar(this),
                new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            if (web.canGoBack())//뒤로 돌아가기 버튼을 눌렀을때 더 뒤로 갈수있으면 웹뷰를 뒤로 돌리고
                web.goBack();
 else //그렇지 않으면 다이얼로그 띄워서 앱을 종료할까 물어본다
                showDialog(0);
            return true;
        }
       
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public Dialog onCreateDialog(int dialogId) {
        Dialog dialog = null;
        switch (dialogId) {
        case 0:
//커스텀 다이얼로그다 뒤로 가다가 더 뒤로 가기 힘들때 보여주는것 내 블로그 찾아보면 custom dialog라고 있다
            CustomDialog.Builder customBuilder = new CustomDialog.Builder(
                    Tab4.this);
            customBuilder.setTitle("Custom title").setMessage("Custom body")
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    Tab4.this.dismissDialog(0);
                                }
                            }).setPositiveButton("Confirm",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    dialog.dismiss();
                                }
                            });
            dialog = customBuilder.create();
            break;
        }
        return dialog;
    }

    private class DraptWebChormeClient extends WebChromeClient {

        /**
         * 페이지를 로딩하는 현재 진행 상황을 전해줍니다. newProgress 현재 페이지 로딩 진행 상황, 0과 100 사이의
         * 정수로 표현.(0% ~ 100%)
         */
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
       
           

        }
    }

    private class DraptWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            Log.i(TAG,"shouldOverrideUrlLoading");
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            Log.i(TAG,"onPageFinished");
            dialog.dismiss();// 웹뷰 진행 상태를 닫는다

            super.onPageFinished(view, url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
     
            Log.i(TAG,"onPageStarted");
         
            super.onPageStarted(view, url, favicon);
//웹뷰 진행 상태를 띄운다
            if(dialog != null)
            {
                dialog.cancel();
                dialog = null;
            }
            dialog = new Dialog(Tab4.this,R.style.prograssdialog);   
            dialog.addContentView(
                    new ProgressBar(Tab4.this),
                    new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
           
           
            dialog.show();
        }

        @Override
        public void onLoadResource(WebView view, String url) {
            // TODO Auto-generated method stub
            Log.i(TAG,"onLoadResource");
           
            super.onLoadResource(view, url);
           
       

        }

        @Override
        public void onReceivedError(WebView view, int errorCode,

        String description, String failingUrl) {

            super.onReceivedError(view, errorCode, description, failingUrl);
            Toast.makeText(activity, "Oh no! " + description,
                    Toast.LENGTH_SHORT).show();

            switch (errorCode) {
            case ERROR_AUTHENTICATION:
                break; // 서버에서 사용자 인증 실패
            case ERROR_BAD_URL:
                break; // 잘못된 URL
            case ERROR_CONNECT:
                break; // 서버로 연결 실패
            case ERROR_FAILED_SSL_HANDSHAKE:
                break; // SSL handshake 수행 실패
            case ERROR_FILE:
                break; // 일반 파일 오류
            case ERROR_FILE_NOT_FOUND:
                break; // 파일을 찾을 수 없습니다
            case ERROR_HOST_LOOKUP:
                break; // 서버 또는 프록시 호스트 이름 조회 실패
            case ERROR_IO:
                break; // 서버에서 읽거나 서버로 쓰기 실패
            case ERROR_PROXY_AUTHENTICATION:
                break; // 프록시에서 사용자 인증 실패
            case ERROR_REDIRECT_LOOP:
                break; // 너무 많은 리디렉션
            case ERROR_TIMEOUT:
                break; // 연결 시간 초과
            case ERROR_TOO_MANY_REQUESTS:
                break; // 페이지 로드중 너무 많은 요청 발생
            case ERROR_UNKNOWN:
                break; // 일반 오류
            case ERROR_UNSUPPORTED_AUTH_SCHEME:
                break; // 지원되지 않는 인증 체계
            case ERROR_UNSUPPORTED_SCHEME:
                break; // URI가 지원되지 않는 방식
            }

        }
    }
}


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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <WebView
        android:id="@+id/tab4_webview"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent" />

       
</LinearLayout>






//이부분이 리소스 부분인데 스타일 정의하는것 보면 거의다가 투명으로 만들어버린다
//이것이 핵심이다
<style
        name="prograssdialog">

        <item
            name="android:windowFrame">@null</item>

        <item
            name="android:windowBackground">@android:color/transparent</item>
           
       
        <item
            name="android:windowIsFloating">true</item>

        <item
            name="android:windowContentOverlay">@null</item>

        <item
            name="android:windowTitleStyle">@null</item>

        <item
            name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>

        <item
            name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>

        <item
            name="android:backgroundDimEnabled">false</item>

        <item
            name="android:background">@android:color/transparent</item>
           
       
           
    </style>
posted by 욱이다
prev 1 next