読者です 読者をやめる 読者になる 読者になる

Zinc #33 プログレスバーの表示

WebViewClientとURLバー、WebChromeClientとプログレスバー、を紐づけてWebページの繊維をブラウザっぽくみせる・・・。

f:id:BG1:20161012152227p:plain

Java Classを追加・・・。

f:id:BG1:20161012152250p:plain

WebViewClientの派生クラスCustomWebViewClient・・・。

コンストラクタにはMainActivityとWebFragmentを渡す・・・。

リンクをクリックすると、リンク先のURLがurlに渡されてここに来るので、mainActivity.setMenuUrlBarでURLバーにurlをセット・・・。

ロードの開始時は、webFragment.setProgressBarVisibilityをtrueにして表示・・・。

ロードの終了時は、webFragment.setProgressBarVisibilityをfalseにして非表示・・・。

MainActivity.setMenuUrlBar・・・。

WebFragment.setProgressBarVisibility・・・。

つづいて、

f:id:BG1:20161012153457p:plain

Java Classの、

f:id:BG1:20161012153518p:plain

WebChromeClientの派生クラスCustomWebChromeClient・・・。

コンストラクタの引数はWebFragment・・・。
進捗が変化した時、onProgressChangedが来るので、webFragment.setProgressでprogressをセットする・・・。

ここでprogressBar.setProgressに渡している・・・。

そして、WebFragmentのonCreateViewでは、

progressBarやwebViewを取得・・・。
webView.setWebViewClientでcustomWebViewClient、webView.setWebChromeClientでcustomWebChromeClientをセット・・・。

これでプログレスバーやリンク先の反映はだいたいできた・・・。
あとは、バックキーの動作・・・。

MainActivity.javaに、

onBackPressedを用意・・・。
webFragment.goBackがfalseならsuper.onBackPressedとなる・・・。

webView.canGoBackがtrueなら、webBackForwardListを取得し、webBackForwardList.getCurrentIndexでページ位置が1以上の場合、webView.goBackで戻る・・・。
このとき、前のurlであるprevUrlを取得しておいて、mainActivity.setMenuUrlBarでURLも戻してtrueを返す・・・。
そうでないならfalse・・・。
trueなら、上のようにページが1つ前に戻り、falseの場合、super.onBackPressedとなり、アプリは終了する・・・。

f:id:BG1:20161012160823p:plain

起動して、

f:id:BG1:20161012160847p:plain

URLを入力して、リターンキーを押すと、

f:id:BG1:20161012160907p:plain

プログレスバーが走り、

f:id:BG1:20161012160939p:plain

Yahoo!トップ・・・。
スポーツナビを押すと、

f:id:BG1:20161012161004p:plain

スポナビへ・・・。
さらに野球を押すと、

f:id:BG1:20161012161102p:plain

野球に・・・。
バックキーで、

f:id:BG1:20161012161126p:plain

スポナビに戻って、
さらにバックキーで、

f:id:BG1:20161012161207p:plain

Yahoo!トップに戻る・・・。
ここでバックキーを押すと、アクティビティが閉じる・・・。

https://github.com/bg1bgst333/Zinc/tree/develop/android/empty_activity/android_studio/src/Zinc