Android - 单击 WebView 会使 AppBar 消失。
Android - Clicking on a WebView makes AppBar disappear.
我正在尝试允许在我的应用程序中调用 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 post 中找到了这些选项)但是我只从第一行和最后一行开始并看到了同样的问题(我知道在那如果您无法点击,但我不小心在 link):
中进行了重定向
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);
这会完美地加载 link 并显示我的操作栏。向上按钮将我带到父级 activity,后退按钮将我带到最后一个 activity 调用。我的问题是,如果我单击 link,它会打开一个新屏幕,它有自己的没有向上按钮的 AppBar。这似乎是完全不同的看法。后退按钮仍然有效,但我的计划是提供一个向上按钮,以便用户可以浏览她想要的几个屏幕,然后可以点击向上按钮返回到我应用程序中的合理位置。在这种情况下,唯一的办法似乎是反复点击后退按钮。
提前致谢
如果您设置 WebViewClient
,您可以在 WebView
中打开 link
对于 API 24+ 覆盖此方法。
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return false;
}
});
如果您支持 API < 24 则使用旧方法
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});
我正在尝试允许在我的应用程序中调用 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 post 中找到了这些选项)但是我只从第一行和最后一行开始并看到了同样的问题(我知道在那如果您无法点击,但我不小心在 link):
中进行了重定向 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);
这会完美地加载 link 并显示我的操作栏。向上按钮将我带到父级 activity,后退按钮将我带到最后一个 activity 调用。我的问题是,如果我单击 link,它会打开一个新屏幕,它有自己的没有向上按钮的 AppBar。这似乎是完全不同的看法。后退按钮仍然有效,但我的计划是提供一个向上按钮,以便用户可以浏览她想要的几个屏幕,然后可以点击向上按钮返回到我应用程序中的合理位置。在这种情况下,唯一的办法似乎是反复点击后退按钮。
提前致谢
如果您设置 WebViewClient
WebView
中打开 link
对于 API 24+ 覆盖此方法。
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return false;
}
});
如果您支持 API < 24 则使用旧方法
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});