Android WebView ile ProgressBar Kullanımı

By | 1 March 2017

Bu yazıdı Android uygulamamızda WebView kullanırken, sayfa açılana kadar ProgressBar gösterimini anlatacağım. Bunun için öncelikle aşağıdaki gibi WebView Activity layout’unu hazırlıyorum.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".WebViewActivity">

    <WebView
        android:id="@+id/webView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:id="@+id/progress"
        />

</RelativeLayout>

 

Çıktımıza baktığımızda aşağıdaki gibi bir görüntü elde ediyoruz.

Screen Shot 2017-03-01 at 7.53.44 PM

Daha sonra Activity kodlarımızı yazmaya başlayabiliriz. WebViewActivity adında Activity oluşturuyorum ve içine aşağıdaki kodları ekliyorum.


public class WebViewActivity extends AppCompatActivity {

    ProgressBar mProgress;
    WebView mWebVview;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        //burada url'i intent ile alıyoruz ve activity değiştiğinde onu kaybetmemek için kaydediyoruz.
        final String url;
        if (savedInstanceState == null) {
            Bundle extras = getIntent().getExtras();
            if (extras == null) {
                url = null;
            } else {
                url = extras.getString("URL");
            }
        } else {
            url = (String) savedInstanceState.getSerializable("URL");
        }
       //webview ve progressbar komponenleri set ediliyor.
        mWebVview = (WebView) findViewById(R.id.webView1);
        mProgress = (ProgressBar) findViewById(R.id.progress);

        mWebVview.getSettings().setJavaScriptEnabled(true);  //JS aktif ediliyor.
        //user-agent ekleniyor.
        String newUA= "mozilla/5.0 (Linux; Android 6.0.1; Nexus 5x build/mtc19t applewebkit/537.36 (KHTML, like Gecko) Chrome/51.0.2702.81 Mobile Safari/537.36";
        mWebVview.getSettings().setUserAgentString(newUA);
        mWebVview.loadUrl(url);
        mWebVview.setWebViewClient(new myWebClient());  //sayfa yüklenmeye başladıktan sonra ve bitene kadarki olaylara oluşturduğum sınıf içerisinde müdahale ediyoruz.

    }
    //açılan web sayfasında geri tuşuna basılınca sayfa içerisinde geri gidiyor. eğer gidecek sayfa yoksa uygulama içerisinde gidiyor.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_BACK:
                    if (mWebVview.canGoBack()) {
                        mWebVview.goBack();
                    } else {
                        finish();
                    }
                    return true;
            }

        }
        return super.onKeyDown(keyCode, event);
    }
    //sayfa yüklenmeye başladıktan sonra, bitene kadarki olaylara müdahale ediyoruz.
    public class myWebClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        //sayfayı yüklemeye başlatıyoruz ve sayfa yüklenirken, progressbar'ı görünür hale getiriyoruz.
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
            mProgress.setVisibility(View.VISIBLE);
            view.loadUrl(url);
            return true;

        }
        //sayfanın yüklenmesi bittiğinde progressbar'ı kaldırıyoruz. 
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

            mProgress.setVisibility(View.GONE);
        }
    }

}

 

Yukarıda kodları açıklamalarıyla birlikte ekledim. Aşağıdaki ekran görüntülerini görebilirsiniz.

export    Screen Shot 2017-03-01 at 8.07.20 PM

 

Bir sıkıntı çıkmadan, istediğim gibi çalıştı. Bu konu için anlatacaklarım şimdilik bu kadar, bir dahaki yazımda görüşmek üzere… 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

*