顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [AndroidStudio] WebView 加上導航按鈕
時間 2016-09-18 Sun. 12:04:33


依照這篇 [AndroidStudio] 加入 WebView 瀏覽網頁 - KnucklesNote板 - Disp BBS
可使用 WebView 瀏覽網頁,但有時需要重整網頁或連到別頁後要回上頁
所以要在上方加個重整與回上頁的按鈕
[圖]



參考這篇 [AndroidStudio] 加入 Google 提供的 Material icons - KnucklesNote板 - Disp BBS
下載 Navigation 類別裡的 chevron left 與 refresh 圖示

參考這篇 [AndroidStudio] Toolbar 使用方法 - KnucklesNote板 - Disp BBS
將回上頁與重整的按鈕加入 menu
    <item
        android:id="@+id/action_back"
        android:icon="@drawable/ic_chevron_left_white_48dp"
        android:title="@string/action_back"
        android:visible="false"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_refresh"
        android:icon="@drawable/ic_refresh_white_48dp"
        android:title="@string/action_refresh"
        app:showAsAction="ifRoom"/>
其中回上頁的按鈕使用 android:visible="false" 預設為隱藏
要在跳至其他頁後才顯示


在 Activity 裡加上成員變數
    Menu mOptionsMenu;
用來控制選單圖示的顯示與隱藏

修改 onCreateOptionsMenu(Menu menu){ 加上
        mOptionsMenu = menu;


複寫 WebViewClient 的函式 shouldOverrideUrlLoading
將 mWebView.setWebViewClient(new WebViewClient()); 改成
        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            //等 shouldOverrideUrlLoading(WebView view, String url) 不能用時再改下面這個
            //public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //Log.d("text","url loading:"+url);
                //顯示回上頁按鈕
                mOptionsMenu.getItem(0).setVisible(true);
                return false;
            }
        });

這樣在 WebView 中點了連結換頁時,就會執行 shouldOverrideUrlLoading()
此時使用 mOptionsMenu.getItem(0).setVisible(true);
將回上頁的按鈕改為顯示

在 SDK 24 以上,shouldOverrideUrlLoading(WebView view, String url) 會標示 deprecated
但還是可以用,且支援度比較好,等以後被標示為不能用時,再改為
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)


在 onOptionsItemSelected 事件加上點擊按鈕後的動作
            case R.id.action_back: //點擊回上頁
                webViewGoBack(); //自訂的函式
                return true;
            case R.id.action_refresh: //點擊重整
                mWebView.reload();
                return true;

新增自訂的函式 webViewGoBack()
    private void webViewGoBack(){
        mWebView.goBack();
        if(!mWebView.canGoBack()){
            mOptionsMenu.getItem(0).setVisible(false);
        }
    }
回上頁之後,若沒有再上一頁的話,隱藏回上頁的按鈕

修改 onBackPressed() 事件
將 mWebView.goBack(); 改為 webViewGoBack()







--
※ 作者: Knuckles 時間: 2016-09-18 12:04:33
※ 編輯: Knuckles 時間: 2017-10-16 02:37:37
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 653 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇