【问题标题】:Android - Clicking on a WebView makes AppBar disappear.Android - 单击 WebView 会使 AppBar 消失。
【发布时间】:2017-01-17 19:28:43
【问题描述】:

我正在尝试在我的应用程序中允许 WebView 调用。在此调用中,他们应该能够浏览到另一个页面。我也在尝试为应用程序保持一致的 AppBar。

我将 .xml 定义为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.realpayment.app.activities.CalledAction"
android:background="@color/c_black">

<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="4dp"
    android:theme="@style/JupiterTheme"
    app:popupTheme="@style/ThemeOverlay.AppCompat"/>
<WebView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/calledAction"
    android:background="@color/c_black"
    android:layout_margin="15px"
    android:layout_below="@+id/my_toolbar"
    android:textColor="@color/c_white"
    />

在我正在调用的代码中(我正在使用选项并在另一篇 SO 帖子中找到这些选项)但我从第一行和最后一行开始并看到相同的问题(我知道在这种情况下你不能点击,但我不小心在我的链接中有重定向):

    WebView browser = (WebView) findViewById(R.id.calledAction);
    browser.setFocusable(true);
    browser.setFocusableInTouchMode(true);
    browser.getSettings().setJavaScriptEnabled(true);
    browser.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    browser.getSettings().setDomStorageEnabled(true);
    browser.getSettings().setDatabaseEnabled(true);
    browser.getSettings().setAppCacheEnabled(true);
    browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    browser.loadUrl(sCallToActionLink);

这会完美加载链接并显示我的操作栏。向上按钮将我带到父活动,后退按钮将我带到最后一个调用的活动。我的问题是,如果我单击一个链接,它会打开一个带有自己的 AppBar 的新屏幕,该屏幕没有向上按钮。这似乎是一个完全不同的观点。后退按钮仍然有效,但我的计划是提供一个向上按钮,以便用户可以浏览她想要的几个屏幕,然后可以点击向上按钮返回到我的应用程序中的合理位置。在这种情况下,唯一的办法似乎是反复点击返回按钮。

提前致谢

【问题讨论】:

  • 所以您希望在您自己的WebView 中打开链接?
  • 是的,我愿意。有理由不这样做吗?我刚刚发现 WebView 正在触发浏览器意图并且不再在我的应用程序中。

标签: android webview appbar


【解决方案1】:

如果您设置了WebViewClient,您可以在WebView 中打开链接

对于 API 24+ 覆盖此方法。

browser.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return false;
        }
    });

如果您支持 API

browser.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    });

【讨论】:

  • 谢谢!但是,该调用已被弃用。不过,我应该能够使用 shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 。它似乎有些棘手,但它应该可以工作。
  • @DanielleCox,实际上这取决于您所针对的 API。我将添加这两种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多