2011-12-16 24 views
12

Así que lo que tengo es básicamente una simple vista web que carga una página. Esta página tiene algunos enlaces que se abren dentro de la vista web. Eso es lo que se supone que debe hacer, así que está funcionando todo bien.Abrir enlace desde Android Webview en el navegador normal como ventana emergente

Pero hay un solo enlace de esa página que debe cargarse como una ventana emergente, por lo que quiero que se abra en el navegador normal cuando las personas hagan clic en él. Pero como dije, todos los enlaces se abren en la vista web, por lo que ese enlace también lo hace.

Mi pregunta es, ¿cómo puedo hacer que este enlace se abra en el navegador normal como una especie de ventana emergente? ¿Es posible? El enlace es variable, por lo que siempre está cambiando, no se puede codificar de forma rígida dentro de la aplicación para abrir en un nuevo navegador.

¿Alguien me puede decir si es posible y cómo hacerlo? ¡Muchas gracias!

+0

Uso intención; por favor vea: http://stackoverflow.com/questions/2201917/how-can-i-open-a-url-in-androids-web-browser-from-my-application – Ozzy

+1

Sé que usted dice que no se puede difícil codifíquelo, pero ¿qué está cambiando sobre el enlace? ¿Seguro que hay algo codificado en el que puede confiar? Luego, simplemente anule onUrlLoading y pase esa url al super pero trate con los demás. Puedo darte un ejemplo si es necesario? – Blundell

+0

@ user1031312 Jaja, por supuesto que no, ¡no soy estúpido! ¡Gracias por la respuesta, lo echaré un vistazo mañana! – MartijnG

Respuesta

28

He aquí un ejemplo de carga vistaweb imperiosa de mantenerse dentro de su vista web o dejar:

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class TestWebViewActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.setWebViewClient(new MyWebViewClient()); 
    } 
} 


class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if(url.contains("somePartOfYourUniqueUrl")){ // Could be cleverer and use a regex 
      return super.shouldOverrideUrlLoading(view, url); // Leave webview and use browser 
     } else { 
      view.loadUrl(url); // Stay within this webview and load url 
      return true; 
     } 
    } 
} 
+0

Gracias ¡mucho! Creo que esto es exactamente lo que estoy buscando. Voy a probar esto mañana, primero tengo que dormir un poco ya que es 1.15 a.m. aquí en este momento;) – MartijnG

+0

Sí, yo también, adictos: p jaja. Sí, así que podrías poner "share.php" dentro de esa declaración if if. Solo ten cuidado, nada más lo usa. – Blundell

4
public class WebViewActivity extends Activity { 

    private WebView webView; 
    private ProgressDialog progress; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 
     WebView myWebView = (WebView) findViewById(R.id.webView1); 
     myWebView.setWebViewClient(new MyWebViewClient()); 
     myWebView.loadUrl("https://www.example.com"); 
    } 

    private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (Uri.parse(url).getHost().equals("https://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; 
     } 
    } 
} 
Cuestiones relacionadas