AI開發實戰9-Web瀏覽框(WebView)的定製2
7.2 返回鍵功能的處理
用App Inventor2開發的App,元件都是依附在Screen上,使用者點選按鍵,也是Screen先接收按鍵事件,對於返回鍵的處理程式碼如下(在Form.java中):
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!BackPressed()) {
boolean handled =super.onKeyDown(keyCode, event);
AnimationUtil.ApplyCloseScreenAnimation(this, closeAnimType);
return handled;
} else {
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onStop() {
super.onStop();
Log.i(LOG_TAG, "Form " + formName + " got onStop");
for (OnStopListener onStopListener : onStopListeners) {
onStopListener.onStop();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// for debugging and future growth
Log.i(LOG_TAG, "Form " + formName + " gotonDestroy");
// Unregister events for components in this form.
EventDispatcher.removeDispatchDelegate(this);
for (OnDestroyListener onDestroyListener : onDestroyListeners) {
onDestroyListener.onDestroy();
}
}
當點選返回鍵的時候,會關閉當前App的Screen,退出應用,返回到系統桌面。
在用Web瀏覽框瀏覽網頁的時候,這樣處理的使用者體驗非常糟糕:使用者在檢視完第三級網頁的時候,想再看下第二級網頁,結果一點選返回鍵,直接就退出應用了。
可以在Form.java中,對Web瀏覽框的情況做特殊處理,程式碼如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//判斷是否可以返回上一級網頁,如果可以則呼叫Web瀏覽框的goBack函式;如果不能再返回,則執行原有程式碼。
if (WebViewer.isCanGoBack()) {
WebViewer.goBack();
return true;
}
if (!BackPressed()) {
boolean handled =super.onKeyDown(keyCode, event);
AnimationUtil.ApplyCloseScreenAnimation(this, closeAnimType);
return handled;
} else {
return true;
}
}
return super.onKeyDown(keyCode, event);
}
在WebViewer.java中增加兩個靜態函式,供Form.java呼叫:
public static boolean isCanGoBack() {
return webview.canGoBack();
}
public static void goBack() {
webview.goBack();
}