看板 KnucklesNote
作者 標題 [AndroidStudio] WebView 加上導航按鈕
時間 2016-09-18 Sun. 12:04:33
依照這篇 [AndroidStudio] 加入 WebView 瀏覽網頁 - KnucklesNote板 - Disp BBS
可使用 WebView 瀏覽網頁,但有時需要重整網頁或連到別頁後要回上頁
所以要在上方加個重整與回上頁的按鈕
![[圖]](http://i.imgur.com/KN6Vbh1.png)
參考這篇 [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" 預設為隱藏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"/>
要在跳至其他頁後才顯示
在 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;
}
});
@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(); //自訂的函式
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);
}
}
回上頁之後,若沒有再上一頁的話,隱藏回上頁的按鈕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 累積人氣: 655
回列表(←)
分享