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

Zinc #9 ロード時のhttp補完および表示時のhttp省略

WebView.loadUrlに指定するURLは"http://"とか"https://"が付いていることが必須となっている・・・。
そのため、"www.google.co.jp"や、"yahoo.co.jp"のように"http://"が付いていない場合は付けないといけない・・・。
一方で、"http://"が付いている場合だけ、URLバーから"http://"を省略したい気もする・・・。

shouldOverrideUrlLoadingの部分で、

showという一時的なStringオブジェクトを作成し、先頭が"http://"なら、7文字目からshowに入れる・・・。つまり"http://"を除いた文字列をshowに代入し、これをurlBarにセット・・・。
そうでない場合は、そのままshowに代入し、urlBarにセット・・・。

これでURL上書きが発生する場合は、URLバーから"http"が表示されなくなる・・・。

さて、いまのところURLをロードするパターンは、

1.BUTTON1を押してurlLoad
2.リンク内をクリック
3.URLリダイレクト
4.ブックマーク選択からのurlLoad

だが、shouldOverrideUrlLoadingが呼ばれるのは2と3で、1と4はurlLoad前に"http"省略しないといけない・・・。
しかも、urlLoad自体は"http"が必須なので、showは"http"省略、loadは"http"補完しないといけない・・・。

BUTTON1が押されたら、"https://"ならshowもloadもurlをそのまま、"http://"ならshowのほうを省略させる・・・。
それ以外は"https://"も"http://"もないので、HTTPとみなしてloadに"http://"を補完・・・。showはそのまま・・・。
showはurlBar.setTextし、loadはwebView.loadUrlする・・・。

これで1もできるようになった・・・。

ブックマークアクティビティで選択された戻ってきたときに、bundleからurlを受け取ったら、先ほどと同じようにshowに省略URL、loadに補完URLを格納し、urlBarとwebViewにセット・・・。
これで4もOK・・・。

f:id:BG1:20160705134549p:plain

パターン1の"http://"のつくURLをBUTTON1でロードの場合、

f:id:BG1:20160705134826p:plain

ロードされてるし省略もされてる・・・。

ここから、

f:id:BG1:20160705135113p:plain

"yahoo.co.jp"を指定してBUTTON1を押す・・・。
リダイレクトされるから2のパターン・・・。

f:id:BG1:20160705135212p:plain

shouldOverrideUrlLoadingを通るので問題なく省略・・・。

SportsNaviを押す3のパターン・・・。

f:id:BG1:20160705135359p:plain

これも省略・・・。

f:id:BG1:20160705135433p:plain

ここでブックマークの管理から、

f:id:BG1:20160705135449p:plain

"http://www.google.co.jp/"を選択、4のパターン・・・。

f:id:BG1:20160705135611p:plain

loadUrl前で省略してるので、こうなる・・・。

ちなみにブックマーク登録の時は、URLはWebViewからとってきてるので、"http://"のついたフルパスになる・・・。
まあこの辺はこっちのほうがいいのかなあとおもって、そのまま・・・。
また最後のスラッシュの処理は残ってるが、複雑そうなのでいまのところはこれで・・・。

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