2017-01-17 3 views
0

Я пытаюсь разрешить вызов WebView в своем приложении. В этом вызове они должны иметь возможность просматривать другую страницу. Я также пытаюсь сохранить совместимый AppBar для приложения.Android - нажатие на 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); 

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

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

+0

Таким образом, вы хотите, чтобы ссылка будет открыта в вашем собственном 'WebView'? – Pztar

+0

Да, да. Есть ли причина не делать этого? Я просто понял, что WebView уходит с ума от намерения браузера и больше не работает в моем приложении. –

ответ

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; 
     } 
    }); 
+0

Спасибо! Однако этот вызов устарел. Я должен иметь возможность использовать shouldOverrideUrlLoading (просмотр WebView, запрос WebResourceRequest) . Кажется, у него какая-то хитрость, но она должна работать. –

+0

@ DanielleCox, на самом деле это зависит от того, какой API вы нацеливаете. Я добавлю оба метода. – Pztar

Смежные вопросы