如何在webview url点击打开新的屏幕?

问题描述:

在我的应用程序,我使用的WebView显示一些网站的数据,我想实现当用户点击任何链接一个新的屏幕(活动)上,其中一个功能将打开和URL的数据将显示在该活动的网页流量。我已经尝试了的WebView客户端设置为网页视图,并覆盖其onPageStarted,shouldOverrideUrlLoading方法,但他们都打开同一个屏幕内的URL。如何在webview url点击打开新的屏幕?

这里是我的代码

webview.loadData(html, "text/html; charset=utf-8", "UTF-8"); 
    webview.setWebViewClient(webViewClient); 
} 
WebViewClient webViewClient = new WebViewClient() { 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     if (url.startsWith("http://")) { 
      Intent intent = new Intent(FirstActivity.this, WebActivity.class); 
      intent.putExtra("url", url); 
      startActivity(intent); 
     } 
    } 
    @Override 
    public void onPageFinished(WebView view, String url) { 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return false; 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 

     return false; 
    } 

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

这可怎么实现的?任何帮助将不胜感激

+1

*我的代码*的某些部分是不完整的,并且*任何建议*不是一个具体的问题。参见[如何创建一个最小的,完整的和可验证的示例](http://*.com/help/mcve)和[问]。 –

试试这个:

@SuppressWarnings("deprecation") 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.startsWith("http://")) { 
     Intent intent = new Intent(FirstActivity.this, WebActivity.class); 
     intent.putExtra("url", url); 
     startActivity(intent); 
     return true; 
    } 
    return false; 
} 

@TargetApi(Build.VERSION_CODES.N) 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 

    String url = request.getUrl().toString(); 
    if (url.startsWith("http://")) { 
     Intent intent = new Intent(FirstActivity.this, WebActivity.class); 
     intent.putExtra("url", url); 
     startActivity(intent); 
     return true; 
    } 
    return false; 
} 
+0

不启动WebActivity而是在加载web视图是URL,它是在第一次活动 – User

+0

你确定网址以http://?可能是https:// – DucPV

试试这个。但是,你首先需要设置一个起始网站如google.com

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


public class MainActivity extends Activity { 

private WebView view; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    view = (WebView) this.findViewById(R.id.webView); 
    view.getSettings().setJavaScriptEnabled(true); 
    view.getSettings().setDomStorageEnabled(true); 
    view.setWebViewClient(new MyBrowser()); 
    view.loadUrl("[YOUR_WEBSITE]"); //try js alert 
    view.setWebChromeClient(new WebChromeClient()); // adding js alert support 

} 
private class MyBrowser extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:") || url.startsWith("mailto:") || url.startsWith("mms:") || url.startsWith("mmsto:") || url.startsWith("market:")) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 
     else { 
      view.loadUrl(url); 
      return true; 
     } 
    } 
} 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { 
     view.goBack(); //method goback() 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
    } 
} 

如果链接是外部网站,你可以做这样的事情:

webview.setWebViewClient(new LinkExtWebViewClient()); 

然后:

public class LinkExtWebViewClient extends WebViewClient { 

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

     if(Uri.parse(url).getHost().endsWith(" if your site is www.myurl.com, here you have to insert 'myurl.com' ")) { 
      return false; 
     } 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     view.getContext().startActivity(intent); 
     return true; 
    } 
} 

让我知道,如果它的工作原理:)