2016-02-19 51 views
1

我們正在嘗試在移動應用程序中包裝網站。本網站支持Chrome,IE9及以上版本和Safari。嘗試創建Android應用程序包的網站,下面是創建全屏Webview無URL地址欄

<?xml version="1.0" encoding="utf-8"?> 
<WebView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/webview" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" /> 

這裏的佈局是我的代碼

protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_web); 
    new GcmRegistrationAsyncTask(this).execute(); 

    WebView myWebView = (WebView) findViewById(R.id.webview); 

    Intent intent = getIntent(); 

    String url = intent.getStringExtra(Constants.URL); 
    myWebView.setWebChromeClient(new WebChromeClient()); 
    //myWebView.setWebViewClient(new WebViewClient()); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    myWebView.loadUrl(url); 
} 

如果我只是用WebViewClient,網站正常運行在全屏模式下但由於它與Android Viewer不兼容,網站看不到。如果我使用WebChromeClient,它會在單獨的瀏覽器(Chrome)中正確打開網站,但會顯示URL地址欄。我經歷了很多帖子,但無法找出解決方案。這是我的最終目標

我需要打開移動應用程序中的網站,我想隱藏地址標題欄。我怎樣才能做到這一點?

回答

1

我用下面的和它的作品就像你想

WebView webView = (WebView) findViewById(R.id.webview); 
ProgressBar progressBar = (ProgrssBar) findViewById(R.id.progressBar); 

String url = "https://www.google.com"; 

progressBar.setIndeterminate(false); 
progressBar.setMax(100); 

WebSettings.ZoomDensity zoomDensity = WebSettings.ZoomDensity.FAR; 
webView.getSettings().setJavaScriptEnabled(true); 

webView.getSettings().setDefaultTextEncodingName("utf-8"); 
webView.getSettings().setLoadWithOverviewMode(true); 
webView.getSettings().setDefaultZoom(zoomDensity); 
webView.getSettings().setSupportZoom(true); 
webView.getSettings().setBuiltInZoomControls(true); 
webView.requestFocus(View.FOCUS_DOWN); 

webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); 
webView.setWebChromeClient(webChromeClient); 
webView.setWebViewClient(this.getWebViewClient()); 

progressBar.setProgress(0); 
progressBar.setVisibility(View.VISIBLE); 
webView.loadUrl(url); 

而且WebChromeClientWebViewClient實現的;

WebChromeClient webChromeClient = new WebChromeClient() { 

    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 

     super.onProgressChanged(view, newProgress); 
     progressBar.setProgress(newProgress); 

    } 
}; 

public WebViewClient getWebViewClient() { 

    return new WebViewClient() { 

     @Override 
     public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 
      super.onReceivedError(view, request, error); 
      progressBar.setVisibility(View.GONE); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 

      progressBar.setVisibility(View.GONE); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      progressBar.setVisibility(View.VISIBLE); 

      //Some checks 
      if (url.contains("load.elsewhere.com")) { 
       //If you want to handle where load.elsewhere.com is loaded, say in another external browser 
       progressBar.setIndeterminate(true); 

       //startActivity to load elsewhere 

       return true; 
      } 

      return super.shouldOverrideUrlLoading(view, url); 
     } 
    }; 
} 

ProgressBar是我加表現出一定的進步

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <WebView 
     android:id="@+id/webView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <ProgressBar 
     android:id="@+id/progressBar" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" /> 

</FrameLayout> 
+0

我嘗試了您的解決方案,但它的工作方式與我的活動相同。當我評論線webView.setWebViewClient(this.getWebViewClient());它會按預期打開一個新的瀏覽器,但會正確加載網站。我無法理解的問題是WebView打開的默認瀏覽器與通過上面的註釋打開的單獨瀏覽器之間的區別。 –

0

WebView沒有一個address bar默認情況下別的東西,必須將其轉發到瀏覽器。該API Guide爲網頁視圖顯示了這個例子覆蓋shouldOverrideUrlLoading

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.example.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 

這將讓您的應用程序在你的應用程序和外站鏈接可以通過設備的瀏覽器進行處理。

+0

我甚至試圖創建一個類似你提到的類的CustomWebView。不過,我仍然面臨着問題。例如我的問題是當我加載www.example.com時,它將我帶到我們組織的SSO頁面。一旦我登錄,它將在單獨的瀏覽器中打開example.com。 (example.com只是一個示例) –