2011-03-29 15 views
6

Tengo una vista web que estoy creando. Parece que automáticamente se vinculan números en tel: urls. No vi una forma de eliminar esta capacidad (al menos, nada similar a la forma de habilitarlo en una vista de texto).Deshabilitar el Linkify automático de Webview

El código es bastante simple:

// populate the web view 
WebView webView = (WebView) findViewById(R.id.app_info_webview); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY); 

webView.setBackgroundColor(0); 
String url = APP_INFO_BODY_HTML + "?versionName=" + versionName; 

webView.loadUrl(url); 

que tienen un aviso de copyright en la parte inferior de la página, androide está cambiando el 2011 en un enlace que abre el marcador. Además, la aplicación versión 1.0.0 se abre en el marcador.

¿Hay alguna manera de deshabilitar esta funcionalidad?

Actualización: Acabo de descubrir que esto parece depender del dispositivo ... ocurre en el Droid X, pero no en un Samsung Captivate, no en el Nexus S, y no en el emulador.

+0

mencionaste que usar una vista de texto estaría bien también. aquí encontrará un enlace sobre cómo agregar enlaces a una vista de texto http://android-developers.blogspot.com/2008/03/linkify-your-text.html – Fender

Respuesta

0

Me sorprende ver que está lanzando Dialer al seleccionar un número de su propio WebView.

A menos que anule WebViewClient :: shouldOverrideUrlLoading() y detecte que el esquema de la url tiene "tel" y comience la actividad del Marcador, nunca lanzará un Marcador desde su WebView. ¿Estás seguro de que no estás manejando el esquema tel: en shouldOverrideUrlLoading()?

7

Hay una manera de hacerlo: bastante feo, con dos capas, pero sigue siendo una solución.

Debe

  1. modificar la forma en la vista web se encargará de los elementos de auto-linkifiable
  2. decirle explícitamente a la página cargada no aplicar estilos y retroalimentación háptica.

    mWebView.setWebViewClient(new WebViewClient() { 
    
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, final String url) { 
        Uri uri = Uri.parse(url); 
    
        //TODO analyse the uri here 
        //and exclude phone and email from triggering any action 
    
        return false; 
    } 
    
    public void onReceivedError(WebView view, int errorCode, 
                 String description, String failingUrl) {} 
    
    public void onPageFinished (WebView view, String url) {...} 
    
    public void onPageStarted(WebView view, String url, Bitmap favicon) {...} 
    
    public void onLoadResource(WebView view, String url) {...} 
    }); 
    

    en el HTML especifican las siguientes etiquetas meta dentro de la etiqueta:

    <meta name="format-detection" content="telephone=no" /> 
    <meta name="format-detection" content="email=no" /> 
    

Espero que esto ayude.

+1

Creo que hay un tercer tipo de detección de formato: . Teléfono: no se detiene el teléfono automático: los enlaces, el correo electrónico detiene el correo automático: los enlaces, y la dirección se detiene geo: enlaces. No puedo encontrar ninguna documentación oficial en el correo electrónico o la dirección. http://developer.apple.com/library/safari/#documentation/appleapplications/reference/SafariHTMLRef/Articles/MetaTags.html solo menciona el teléfono. –

-2

Puede encontrar el código que hacer la detección real en external/webkit/WebKit/android/nav/CacheBuilder.cpp: FindPartialNumber() y así sucesivamente.

Puede desactivarlo o cambiar la lógica como desee.

Cuestiones relacionadas