¿Cómo quitar la pantalla blanca mientras se carga la aplicación de Android?

Soy nuevo en android. Tengo una vista web que carga una URL. El problema es que después de abrir la aplicación hay una pantalla blanca durante 2-3 segundos después de que se carga la URL de la vista web.

Creo que este es el tiempo que inicia la aplicación. ¿Cómo puedo eliminar la pantalla en blanco y mostrar mi Logo para ese momento? He oído hablar de la pantalla de bienvenida, pero en que el logotipo aparece durante 1 segundo, entonces la pantalla blanca aparece durante otros 2-3 segundos y, finalmente, la vista web se carga.

¿Qué estoy haciendo mal? ¿Es una pantalla de bienvenida o alguna otra forma de mostrar el logotipo mientras se carga la vista web?

package com.exampe.dating; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; import android.view.KeyEvent; import android.view.Menu; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView mywebview = (WebView) findViewById(R.id.webview); mywebview.loadUrl("http://www.example.com/mobile/index.php"); WebSettings webSettings = mywebview.getSettings(); webSettings.setJavaScriptEnabled(true); mywebview.setWebViewClient(new WebViewClient()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { WebView mywebview = (WebView) findViewById(R.id.webview); if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) { mywebview.goBack(); return true; } return super.onKeyDown(keyCode, event); } } 

SplashActivity.java

 package com.exampe.dating; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Window; import android.view.WindowManager; public class SplashActivity extends Activity { private static String TAG = SplashActivity.class.getName(); private static long SLEEP_TIME = 10; // Sleep for some time @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Removes notification bar setContentView(R.layout.splash); // Start timer and launch main activity IntentLauncher launcher = new IntentLauncher(); launcher.start(); } private class IntentLauncher extends Thread { @Override /** * Sleep for some time and than start new activity. */ public void run() { try { // Sleeping Thread.sleep(SLEEP_TIME*1000); } catch (Exception e) { Log.e(TAG, e.getMessage()); } // Start main activity Intent intent = new Intent(SplashActivity.this, MainActivity.class); SplashActivity.this.startActivity(intent); SplashActivity.this.finish(); } } } 

AndroidManifest

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.exampe.dating" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".SplashActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.exampe.dating.MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Es muy raro tener dos actividades de lanzamiento declaradas en su manifiesto así. Debería eliminar el filtro de intenciones para SplashActivity y comenzar a SplashActivity desde dentro onCreate de su MainActivity :

EDITAR Actualizado para reemplazar el sueño con la espera. La pantalla Splash desaparecerá cuando se cargue la página o cuando se produzca un tiempo de espera, lo que ocurra primero.

 public class MainActivity extends Activity { public static Object SPLASH_LOCK = new Object(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView mywebview = (WebView) findViewById(R.id.webview); mywebview.loadUrl("http://www.example.com/mobile/index.php"); WebSettings webSettings = mywebview.getSettings(); webSettings.setJavaScriptEnabled(true); mywebview.setWebViewClient(new WebViewClient()); startActivity(new Intent(this, SplashActivity.class)); } . . . } // in your WebViewClient: public void onPageFinished (WebView view, String url) { synchronized (SPLASH_LOCK) { SPLASH_LOCK.notifyAll(); } } 

A continuación, en SplashActivity , espere el retardo que desea y llame a finish() . No es necesario que MainActivity porque se encuentra detrás de SplashActivity y aparecerá cuando SplashActivity termine.

 public class SplashActivity extends Activity { private static String TAG = SplashActivity.class.getName(); private static long MAX_SPLASH_TIME = 10000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); . . . setContentView(R.layout.splash); new Thread() { @Override public void run() { synchronized (MainActivity.SPLASH_LOCK) { // wait for notify or time-out try { MainActivity.SPLASH_LOCK.wait(MAX_SPLASH_TIME); } catch (InterruptedException ignored) {} } finish(); } }.start(); } . . . } 

Tenga en cuenta que no necesita la clase IntentLauncher .

PS No preguntaste acerca de esto, pero si agregas esto a la etiqueta de SplashActivity en tu manifiesto:

 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

Entonces no necesita llamar a requestWindowFeature o establecer banderas de ventana en onCreate .

Ahora usted está mostrando un chapoteo, durmiendo y luego despedir el chapoteo al mismo tiempo que el lanzamiento del mainactivity que es el comienzo del comienzo para cargar la página. Splash-> Sleep-> Lanzar y descartar Splash -> carga de la página

Usted debe comenzar a cargar la página mientras que el chapoteo está demostrando y quitar el chapoteo cuando la página se ha cargado.

Puede anular la

 public void onPageFinished (WebView view, String url) 

Del WebViewClient que está conectado a su WebView y hacer que el método de descartar el splash. Es probablemente más fácil tener el splash como un diálogo en lugar de una actividad también.

  • ¿Cómo hacer un efecto de rizo sobre un diseño lineal, sin sobrepasar el color de fondo de sus hijos?
  • En Android; ¿Es mejor aplicar un OnClickListener o usar android: onClick?
  • Cómo configurar Google iosched fuente como un proyecto de referencia en Eclipes
  • Construir una línea de tiempo con la vista personalizada
  • ¿Cómo obtener ViewSwitcher para envolver sólo la altura de vista actualmente visualizada?
  • Android: SeekBar con dibujable a medida
  • Cómo encontrar la lista de View (s) que tiene una etiqueta específica (atributo)
  • Excepción de puntero nulo al llamar a la medida en el diseño inflado
  • Android: creación de dos columnas en una imagen lineal
  • ActionBarSherlock spinner no seleccionable en ActionBar - Tema relacionado
  • ¿El android: scaleType = "fitCenter" sólo funciona con los atributos fix Layout_width y Layout_height?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.