2016-02-19 59 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只是一个示例) –