ver veo studio puedo previsualizacion pantalla nada muestra intent diseño desde boton aparece activity abrir android webview

veo - no se ve el diseño android studio



Al abrir una nueva actividad de Android con una vista web, se muestra una pantalla en blanco(blanca) en lugar del contenido html. (10)

¡He estado investigando durante 2 días y no he encontrado un problema similar en ninguna parte de Internet!

Desde la actividad principal, estoy intentando abrir una nueva actividad que contiene una vista web que mostrará una página html (about.html) en la carpeta android_asset.

Puedo iniciar la nueva actividad (test.java) con la vista web correctamente mostrada, pero el contenido de la página web simplemente no se muestra. Incluso se muestra la barra de desplazamiento vertical de webview (ya que el contenido de la página es relativamente largo) y puedo desplazar la página hacia arriba y hacia abajo, ¡pero sin contenido!

package com.example.test; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.TextView; public class test extends Activity { private TextView apppagetitle; private WebView browser_rn; @Override public void onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.test); browser_rn=(WebView)findViewById(R.id.webkit); browser_rn.getSettings().setJavaScriptEnabled(true); browser_rn.getSettings().setPluginsEnabled(true); browser_rn.setScrollBarStyle(0); final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); apppagetitle=(TextView)findViewById(R.id.apppagetitle); browser_rn.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } public void onPageFinished(WebView view, String url) { apppagetitle.setText(browser_rn.getTitle()); } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { if (!isInternetOn()) { alertDialog.setTitle("Connection Error"); alertDialog.setMessage("You need to be connected to the internet."); } else { alertDialog.setTitle("Error"); alertDialog.setMessage(description); } alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }); alertDialog.show(); } }); browser_rn.loadUrl("file:///android_asset/about.html"); } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { browser_rn.clearCache(true); browser_rn.clearHistory(); this.finish(); return true; } return super.onKeyDown(keyCode, event); } }

Lo extraño es que la nueva actividad (test.java) puede obtener y mostrar con éxito el título de la página web en la vista de texto cuando llamo webview.gettitle () pero el contenido html simplemente no se representa en la vista web. Todo lo que veo es una pantalla en blanco con barras de desplazamiento. Sospecho que es el booleano "shouldOverrideUrlLoading" lo que podría estar causándolo.

Actualizar:

Gracias por responder.

test.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res/com.example.test" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/green" > <TextView android:id="@+id/apppagetitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:text="Odd News" android:textSize="25px" android:padding="10px" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <WebView android:id="@+id/webkit" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1" /> </LinearLayout> </LinearLayout>

about.html es tan simple como lo que está abajo.

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>About</title> </head> <body> <h3 style="color:#0066dd">About</h3> <p>Some text here...</p> </body> </html>

Ah, sí, y olvidé mencionar antes que con el mismo código, el about.html a veces se mostraría si me detengo y reinicio la aplicación en mi teléfono. Sin embargo, entonces no aparecería en lanzamientos posteriores. En ocasiones, cuando aparece con éxito about.html y presiono el botón Atrás para volver a la actividad principal, desaparecerá de nuevo cuando vuelva a iniciar la actividad desde la actividad principal. Estoy perdido, pero tengo la fuerte sensación de que no debería hacerlo "debería superarse la carga de carga".


Necesita devolver verdadero en el método shouldOverrideUrlLoading

public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }


Actualicé la semana pasada de 2.3.4 a 4.0 en mi HTC Sensation. Las dos aplicaciones que escribí tenían un sitio de contacto HTML local. En 2.3 funcionó bien, ahora obtengo un sitio "Página web no disponible".

Encontré otra publicación aquí en este sitio con el comentario: "A través de una discusión con un ingeniero de Google, parece que han tomado la decisión de que el esquema de archivo: // es inseguro".

Consulte aquí la solución: Android 4.0.1 rompe el almacenamiento local de WebView HTML 5.


Agregue la siguiente línea en su actividad que contiene la actividad de WebView android:hardwareAccelerated="false"

espero que ayude


No intentes cargar la url dada en shouldOverrideUrlLoading , y tampoco devuelvas la verdad en tu caso. Realmente, por lo que parece que estás tratando de hacer, no deberías anularlo en absoluto.

Devolviendo verdadero desde shouldOverrideUrlLoading indica a WebView que no debe cargar la URL especificada. Es probable que lo que esté haciendo, al decirle a WebView que comience a cargarlo nuevamente, cause algún tipo de bucle interno dentro de la WebView, por lo que supongo que es por eso que está viendo un comportamiento extraño.


Prueba este cambio en tu text.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res/com.example.test" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".text" > <!-- Here is the change --> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/green" > <TextView android:id="@+id/apppagetitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:text="Odd News" android:textSize="25px" android:padding="10px" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <WebView android:id="@+id/webkit" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1" /> </LinearLayout> </LinearLayout>



Puedo dar la otra manera de resolver este problema. Simplemente copie el archivo de activos en la ruta de datos "/data/data/org.test.test/" y cárguelo en WebView de la siguiente manera.

String strHTMLFilePath = "file:///data/data/org.test.test/Files/help_android.html"; webView.loadUrl(strHTMLFilePath);

Use el siguiente código para copiar el archivo HTML del activo a la ruta de datos

void getAssetFiles() { String WriteFileName = "/data/data/org.test.test/"; try { String list[] = thisActivity.getAssets().list("Files"); String outFileName = WriteFileName+"Files/"; if (list != null) for (int i=0; i<list.length; ++i){ if(!new File(outFileName).exists()){ new File(outFileName).mkdirs(); } OutputStream myOutput = new FileOutputStream(outFileName+list[i]); byte[] buffer = new byte[1024]; int length; String strWritePath = "Files" + "/" + list[i]; InputStream myInput = thisActivity.getAssets().open(strWritePath); while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } myInput.close(); myOutput.flush(); myOutput.close(); } } catch (IOException e) { } }


Utilizar esta

browser_rn.loadDataWithBaseURL(url);

en lugar de

browser_rn.loadUrl("file:///android_asset/about.html");


intenta cambiar tu código

public boolean shouldOverrideUrlLoading(WebView view, String url) { return true; }

Echa un vistazo a este tutorial .


resolver el mismo problema

He intentado las soluciones en el link . Falló todo el tiempo.

Mi situación es la misma. Hay video H5 en webview, lo hace bien la primera vez y luego falla. cuando falla, encontré algún mensaje del registro

  1. onProgressChanged y no al 100% sin más progreso
  2. cromo: [ERROR: in_process_view_renderer.cc (193)] Error al solicitar el proceso de GL. Punto muerto probable: 0

cuando invoco metodo

mWebView.loadUrl(url)//webview''s height is 0px now //some code change webView''s height here

Mis soluciones están configuradas para webview height dp o match_parent por defecto. ¡Funciona bien!