Android — нажатие на WebView приводит к исчезновению AppBar.

Я пытаюсь разрешить вызов 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"
    />

In my code I am calling (I am playing with the options and found these in another SO post) but I starting with just the first and last line and see the same issue (I know in that case you can't click, but I accidentally had a redirect in my 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);

Это отлично загружает ссылку, и отображается моя панель действий. Кнопка «вверх» возвращает меня к родительскому действию, а кнопка «Назад» — к последнему вызванному действию. Моя проблема в том, что если я нажму на ссылку, она откроет новый экран с собственной панелью приложений, на которой нет кнопки «вверх». Это кажется совершенно другим взглядом. Кнопка «Назад» по-прежнему работает, но я планирую предоставить кнопку «вверх», чтобы пользователь мог перемещаться по паре экранов, которые ему нужны, а затем нажимать кнопку «вверх», чтобы вернуться в подходящее место в моем приложении. В этом случае кажется, что единственным выходом является многократное нажатие кнопки «Назад».

заранее спасибо


person Danielle Cox    schedule 17.01.2017    source источник
comment
Итак, вы хотите, чтобы ссылка открывалась внутри вашего собственного WebView?   -  person Pztar    schedule 17.01.2017
comment
Да. Есть ли причина не делать этого? Я только что понял, что WebView запускает намерение браузера и больше не находится в моем приложении.   -  person Danielle Cox    schedule 17.01.2017


Ответы (1)


Вы можете открыть ссылку в своем WebView, если вы установите WebViewClient

Для 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;
        }
    });
person Pztar    schedule 17.01.2017
comment
Благодарю вас! Однако этот вызов устарел. Однако я должен иметь возможность использовать shouldOverrideUrlLoading (представление WebView, запрос WebResourceRequest). Кажется, есть некоторые хитрости, но это должно сработать. - person Danielle Cox; 17.01.2017
comment
@DanielleCox, на самом деле это зависит от того, на какой API вы ориентируетесь. Я добавлю в оба метода. - person Pztar; 17.01.2017