2017-01-17 2 views
0

내 응용 프로그램에서 WebView 호출을 허용하려고합니다. 이 호출에서 다른 페이지를 탐색 할 수 있어야합니다. 또한 응용 프로그램에 일관된 AppBar를 유지하려고합니다. (나는 다른 SO 게시물에 이러한 옵션을 가지고 노는 발견하고) 내 코드에서Android - WebView를 클릭하면 AppBar이 사라집니다.

<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" 
    /> 

내가 부르고 있지만, 난 그냥 시작되는

으로 나는 .XML가 정의한 처음과 마지막 행과 같은 문제 참조 (난 당신이 클릭 할 수없는 경우에 알을,하지만 난 실수로 내 링크에서 리디렉션했다) :

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가있는 새 화면이 열린다는 것입니다. 이것은 완전히 다른 견해 인 것처럼 보입니다. 뒤로 버튼은 여전히 ​​작동하지만 내 계획은 사용자가 원하는 몇 가지 화면을 탐색 한 다음 위로 버튼을 눌러 내 앱의 적절한 위치로 돌아갈 수 있도록 위로 버튼을 제공하는 것입니다. 이 경우 유일한 방법은 뒤로 버튼을 반복적으로 누르는 것입니다. 이 메소드를 오버라이드 (override) 24+ API를 들어 WebViewClient

를 설정하면 당신은 당신의 WebView 내에서 링크를 열 수 있습니다 사전

+0

그래서 당신은 링크가 자신의'WebView' 내에서 열 수하고자하는 기존 방법을 사용 API <을 지원하는 경우? – Pztar

+0

예. 하지 않을 이유가 있습니까? WebView가 브라우저의 의도를 벗어나 더 이상 내 응용 프로그램에 있지 않다는 것을 알았습니다. –

답변

1

감사합니다.

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

당신은 (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

관련 문제