WebView permite crear una ventana personalizada dentro del
interfaz gráfico de la app para la visualización de código HTML, ya sea directamente
cargado desde un String o proveniente de una página web.
Se suele emplear para mostrar contenido enriquecido de forma
sencilla, o para acceder a una web sin salir de la app.
Compatibilidad
v1
Lo mínimo necesario
Un layout con un WebView.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/wvWeb"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
|
Cargar el WebView con el código HTML:
//El método loadDataWithBaseURL respeta los caracteres latinos
WebView wv = (WebView) view.findViewById(R.id.wvWeb);
wv.loadDataWithBaseURL(null, texto, "text/html", "UTF-8", null);
|
En el caso de acceder a una web
externa es necesario permiso de Internet en el Manifest.
<uses-permission android:name="android.permission.INTERNET"/>
|
Cargar la URL en el WebView:
WebView wv = (WebView) view.findViewById(R.id.wvWeb);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl("http://www.google.es");
|
WebViewClient
WebView tiene gran cantidad de
opciones configurables como activar zoom (setSupportZoom) o modificar el tamaño
de fuente (setTextSize). El método loadUrl carga la dirección deseada.
Si se busca que WebView se
comporte como un navegador completo y se puedan seleccionar los enlaces manteniendo
el control la app se debe implementar un WebViewClient.
Para ello simplemente añadir una
clase que herede de WebWiewClient encargada de cargar los enlaces:
private class Client
extends WebViewClient {
/**
* Este método permite interceptar URLs no deseadas
* @return false si la app no debe cargar la URL
*/
@Override
public boolean
shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
|
Configurar el WebView para que
utilice el WebViewClient anterior.
wv.setWebViewClient(new Client());
|
Por último, para que el navegador
esté completo es necesario que el botón back responda como un atrás del
navegador invocando al método goBack() del WebView. Si el WebView está
gestionado desde una Activity resulta muy sencillo (los fragments no tienen
posibilidad de sobrescribir onBackPressed).
@Override
public void onBackPressed()
{
if (wv.canGoBack()){
//Volver a la página anterior si se había navegado
wv.goBack();
}else{
super.onBackPressed();
}
}
|
No me funciona el botón Back, me genera un error y sale de la aplicación.
ResponderEliminar@Override
public void onBackPressed() {
if (wv.canGoBack()){
//Volver a la página anterior si se había navegado
wv.goBack();
}else{
super.onBackPressed();
}
}
Prueba a poner el siguiente código en la primera línea de ese método:
EliminarWebView wv = (WebView) view.findViewById(R.id.wvWeb);
Seguramente el problema es que en ese método la variable wv sea null porque la hayas definido como atributo de la clase pero no la hayas inicializado como tal y por tanto se te produce un NullPointerException, de cualquier forma si el error persiste y me pasas traza de error quizás pueda ayudarte mejor
hola
Eliminaren amdroid 2.3 los inputs no permiten acceder a teclado. solo hat que minimizar la aplicacion....maximizar y solo ahi toma....solo para inputs...
tienes algun codigo en html que permita minimizar y maximizar la app de android desde un href con html?
o la otra forma que se me ocurre es activar con mailto o tel en html...lo he hecho y eso supera el bug del input pero no se como poder cerrar la .....
saplicacion del email o del telefono mediante html
splo me sirve en html...
EliminarBuenas Alberto,
Eliminardisculpa pero hasta el momento no había leído tu comentario, no he logrado conseguir un código como el que me referías, me pregunto si pudiste solucionarlo y cómo.
Gracias
No.
EliminarAl parecer es un error de android version 2 al 3
Loq ue hice fue generar una apertura del email luego de unos segundos de haber abierto el programa, para que asi el usuario tenga que si o si devolverse con el boton retroceso. Desde ese instante no hay problemas en tener que usar la app.