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

Zinc #23 PCサイトブラウザ

表示をPCサイトに切り替えるには、Webアクセス時のUserAgentをPCのブラウザ用にすればいい・・・。

ちょっと古いけど、

Androidブラウザの「パソコンサイト表示」のユーザーエージェント « kawama.jp

ここにあるUserAgent、

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"

に変更する・・・。

まずはmenu_main.xmlで、

action_show_pcsiteを追加・・・。

action_show_pcsite_textはstrings.xmlに、

最初は"PCサイトの表示"となる・・・。

MainActivity.javaだが、

tabHost.addTabの第3引数にBundle型argsを渡していて、中身はtabTagName・・・。
tabSpecでtabTagNameをセットしていると思うが、どうもWebViewTabFragmentにはtabTagNameは届いていない模様・・・。

ここでも・・・。

"PCサイトの表示"を押すと、なんとかして現在のタブに紐づいているWebViewTabFragmentを取得し、それのisPCメンバがfalseならwf.reloadPCSiteでPCサイトでリロード、trueならwf.reloadPhoneでモバイルサイトでリロード・・・。

あ、そうそう・・・。

tabHost.clearAllTabsのあとに、fragmentTransaction.removeによる削除は、落ちる時があるのでいらない模様・・・。
(実際にFragmentがちゃんと消えてるかは怪しいのだが・・・。)

メニューを表示させるときも、現在のisPCの状況によって"PCサイトの表示"と"モバイルサイトの表示"を切り替える・・・。

WebViewTabFragment.javaは、

isPCはPCサイト表示かどうか、phoneUAはモバイルサイト用UserAgent、pcUAはPC用UserAgent、tagはこのフラグメントのタグ・・・。

savedInstanceStateにはBundleが渡されないので注意である・・・。
getArgumentsからbundleを取得し、bundleからtagを取得する・・・。
そしたらtagをfragmentViewにセットする・・・。
こうすると、別の場所からこのFragmentを取得するための手掛かりとなるタグが付く・・・。
これにより、fragmentManagerから探しているWebViewTabFragmentを取得できる・・・。

phoneUAは、webView.getSettings().getUserAgentStringで取得、
pcUAは、先ほどのUserAgent文字列をセットしておく・・・。

最初はモバイルなので、webView.getSettings().setUserAgentStringでphoneUAをセットする・・・。
もし、モバイルじゃない場合はpcUAをセットする・・・。

reloadPCSiteは、isPCをtrueにし、pcUAをセットしてリロード・・・。
reloadPhoneは、isPCをfalseにし、phoneUAをセットしてリロード・・・。

これでメニューで切り替えができる・・・。

f:id:BG1:20160726184112p:plain

普通に表示するとモバイルサイト表示・・・。

f:id:BG1:20160726184121p:plain

メニューから、"PCサイトの表示"を押すと、

f:id:BG1:20160726184153p:plain

横に広がったPCサイトに・・・。

f:id:BG1:20160726184209p:plain

メニューを開くと、"モバイルサイトの表示"になっているのでこれを押すと、

f:id:BG1:20160726184243p:plain

元に戻る・・・。

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