WebView necesita un WebViewClient para trabajar?
Estaba pasando por tutoriales de android y probé el ejemplo de WebView
. Esto es lo que terminé con:
WebAppActivity
- File.list () devuelve los archivos en un orden diferente para 4.0 que 2.2
- ¿Cómo obtengo el contenido de la página web desde un WebView?
- Las funcionalidades de JQuery no funcionan cuando carga los datos html de una cadena en webview
- ¿Se puede usar la API de PostMessage para comunicarse con un WebView de Android?
- Agente de usuario de WebView
public class WebAppActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView wv = (WebView) findViewById(R.id.webView1); wv.loadUrl("http://www.google.com"); } }
Main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <WebView android:id="@+id/webView1" android:layout_width="fill_parent" android:layout_height="fill_parent" > </WebView> </LinearLayout>
Pero en lugar de cargar la página en la aplicación en sí, tan pronto como la aplicación se inicia el navegador predeterminado android se abre y la página se carga en el navegador en lugar de la aplicación. Cuando vuelvo a pulsar regreso a la actividad de la aplicación que muestra una pantalla en blanco.
¿Alguien sabe por qué ocurre esto?
Editar:
manifiesto
<uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".WebAppActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
Esto fue sólo para demostrar que he añadido el permiso de INTERNET
Editar:
Tan pronto como agrego un WebViewClient
,
wv.setWebViewClient(new WebViewClient() {});
La página se carga en la aplicación. ¿Es este comportamiento esperado? ¿Un WebView de Android requiere un WebViewClient? (No pudo encontrar ninguna documentación sobre el mismo)
Editar:
Me di cuenta de que este problema se produce cuando instalo el apk en un emulador que tiene las API de Google. En un emulador normal (sin las API de Google) se comporta como se esperaba.
- ¿Hay una alternativa a la visualización web?
- ¿Cómo podemos manejar errores HTTP, como: 401, 403, 404, 500 en android.webview?
- Android Zoomable / desplazable ImageView con superposiciones
- Problema de CORS con Tomcat y Android Webview
- Intento escribir una base de datos readonly ... pero no estoy
- Android WebView: muestra sólo una parte del sitio web
- NullPointerException al ingresar video en pantalla completa webview nokia x
- Manejo de teclado virtual de vista Web en android
Sí, tienes que configurar un WebViewClient que devuelva true en el método reemplazado 'shouldOverrideUrlLoading' para que tu webview cargue el url en tu aplicación.
Déjeme saber si usted quiere un ejemplo.
Editar
@Aki WebViewClient.shouldOverrideUrlLoading Documentación
Dar a la aplicación de acogida la oportunidad de hacerse cargo del control cuando una nueva url está a punto de ser cargado en el actual WebView. Si WebViewClient no se proporciona, de forma predeterminada WebView le pedirá a Activity Manager que elija el controlador adecuado para la url . Si se proporciona WebViewClient, return true significa que la aplicación host controla la url, mientras que return false significa que el WebView actual controla la url.
private WebView webVenue; private WebSettings websettings; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.schedule_time); webVenue = (WebView)findViewById(R.id.webview_schedule_time); txtEmptyMsg = (TextView)findViewById(R.id.txtEmptyMsg); mContext = this; webVenue.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webVenue.getSettings().setJavaScriptEnabled(true); websettings=webVenue.getSettings(); webVenue.setScrollBarStyle(ScrollView.SCROLLBARS_OUTSIDE_OVERLAY); webVenue.loadUrl(URL); } }
Todo lo mejor…
No no completamente, pero le permite hacer un montón de cosas.
Tenga en cuenta que hacer una llamada a shouldOverrideUrlLoading en WebViewClient no parece funcionar, por lo que debe hacer su procesamiento en onPageFinished.
Aquí hay una entrada en el blog que te guiará.
Para cargar una página web de url en una vista web, no hay necesidad de configurar cliente de webview. Sin cliente de webview, puede cargar una página web en su webview. Pero WebViewClient ofrece muchas ventajas para manejar la webview. Ejemplo de uso para cargar la página web desde url,
webView.loadUrl(yoururl);
La única razón por la que se abre la url en el navegador predeterminado de android es debido a "wv.loadUrl (" http://www.google.com ");"
Cuando carga http://www.google.com , el sitio web de Google realmente redirige la página a http://www.google.co.in (suponiendo que esté iniciando la aplicación desde India).
Si ejecuta "wv.loadUrl (" http://www.google.co.in ");", google no redirigirá la página y la primera página se abrirá en su aplicación y se abrirán más clics en el sistema navegador.
Para manejar estos nuevos clics necesitas WebViewClient.
- Lista de todos los procesos en ejecución en Android
- ¿Por qué el agente de usuario se envía como "Apache-HttpClient / UNAVAILABLE (java 1.4)"