AI开发实战9-Web浏览框(WebView)的定制2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xjbclz/article/details/77620848

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();

 }

猜你喜欢

转载自blog.csdn.net/xjbclz/article/details/77620848