android - crear - xamarin forms splash screen cross platform
Android SplashScreen (4)
Estoy desarrollando una aplicación que básicamente descarga una gran cantidad de datos al inicio de la aplicación y la muestra en ListActivity. Lo que planeo hacer es mostrar una pantalla de bienvenida hasta que se carguen los datos.
Hasta ahora, todos mis intentos han sido inútiles. Intenté usar métodos de anddev.org, pero mi problema es que la actividad principal debería comenzar, pero la pantalla de bienvenida debería estar visible hasta que complete mi ListActivity. En resumen, tengo que seguir los siguientes pasos:
- Comience mi actividad principal
- Mostrar la pantalla de bienvenida.
- Sigue ejecutando el proceso en segundo plano.
- Salga de la pantalla de bienvenida cuando finalice el procesamiento y muestre la lista principal.
Espero que entiendas cómo es ...
- Comience mi actividad principal
- Mostrar la pantalla de bienvenida.
- Sigue ejecutando el proceso en segundo plano.
- Salga de la pantalla de bienvenida cuando finalice el procesamiento y muestre la lista principal.
Intenté de esta manera, pero el problema es; Mostrará la actividad principal antes de iniciar la actividad de la pantalla de presentación.
Lo hice de esta manera:
- Inicie la pantalla de bienvenida
- Cuando el proceso se completa, comienza la "actividad principal"
- No olvide manejar el botón Atrás, por lo que debe cerrar la aplicación. Se presionará en la actividad principal. De lo contrario volverá a la pantalla de presentación (bucle)
Mi problema es cómo desactivar "mostrar el menú de la actividad de la pantalla de bienvenida" presionando el botón de menú.
Editar:
Deshabilitar el menú de muestra:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.activity_main, menu);
return false;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// return super.onMenuItemSelected(featureId, item);
return false;
}
Ejemplo de pantalla de bienvenida:
public class MainActivity extends Activity {
private ImageView splashImageView;
boolean splashloading = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
splashImageView = new ImageView(this);
splashImageView.setScaleType(ScaleType.FIT_XY);
splashImageView.setImageResource(R.drawable.ic_launcher);
setContentView(splashImageView);
splashloading = true;
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
splashloading = false;
setContentView(R.layout.activity_main);
}
}, 3000);
}
}
Es probable que el problema sea que está ejecutando la pantalla de bienvenida (algún tipo de Dialog de Dialog como ProgressDialog , supongo) en el mismo hilo que todo el trabajo que se está realizando. Esto evitará que se actualice la vista de la pantalla de bienvenida, lo que evitará que se muestre en la pantalla. AsyncTask mostrar la pantalla de inicio, iniciar una instancia de AsyncTask para descargar todos sus datos y luego ocultar la pantalla de inicio una vez que la tarea esté completa.
Entonces, el método onCreate () de su Actividad simplemente crearía un ProgressDialog y lo mostraría. Luego crea el AsyncTask y comienza. Convertiría a AsyncTask en una clase interna de su actividad principal, por lo que puede almacenar los datos que ha descargado en alguna variable en su Actividad y cerrar el ProgressDialog en su método onPostExecute ().
No estoy seguro de cómo seguir elaborando sin solo mostrar el código, así que aquí está:
public class MyActivity extends Activity {
private ProgressDialog pd = null;
private Object data = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Show the ProgressDialog on this thread
this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);
// Start a new thread that will download all the data
new DownloadTask().execute("Any parameters my download task needs here");
}
private class DownloadTask extends AsyncTask<String, Void, Object> {
protected Object doInBackground(String... args) {
Log.i("MyApp", "Background thread starting");
// This is where you would do all the work of downloading your data
return "replace this with your data object";
}
protected void onPostExecute(Object result) {
// Pass the result data back to the main activity
MyActivity.this.data = result;
if (MyActivity.this.pd != null) {
MyActivity.this.pd.dismiss();
}
}
}
}
Obviamente, hay algunas piezas que debe completar allí, pero este código debería ejecutarse y brindarle un buen punto de partida (perdóneme si hay un error de código, no tengo acceso al SDK de Android porque estoy escribiendo esto). actualmente).
Se puede encontrar algo más de buena lectura sobre el tema de AsyncTasks en Android here y here .
solo como referencia, esta es la mejor manera que encontré para hacer una pantalla de bienvenida: http://android-developers.blogspot.de/2009/03/window-backgrounds-ui-speed.html
Estuve buscando esto por bastante tiempo, desde documentos de androides ... si quieres evitar esas pantallas negras, necesitas crear un tema con windowBackground así que:
<resources>
<style name="Theme.Shelves" parent="android:Theme">
<item name="android:windowBackground">@drawable/background_shelf</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
Y establece este tema como el tema para tu actividad principal ... TADA, pantalla emergente desde el primer segundo.
Si desea un fondo complejo y no solo una imagen que se estirará para rellenar, puede utilizar Dratables, aquí hay un ejemplo de una lista de capas que mantendrá el logotipo centrado con un fondo negro:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@color/black">
</item>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/logo"
android:tileMode="disabled" >
</bitmap>
</item>
</layer-list>