Android: Cómo crear una “rueda” de superposición modal Progreso?
-
18-09-2019 - |
Pregunta
Me gustaría mostrar una superposición modal progreso "rueda" en mi opinión.
El ProgressDialog se acerca, pero no quiero que el fondo de diálogo o de la frontera.
He intentado establecer el dibujable fondo de la ventana de diálogo:
this.progressDialog = new ProgressDialog(Main.this);
this.progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setCancelable(false);
this.progressDialog.setIndeterminate(true);
this.progressDialog.show();
pero sin éxito (es decir, todavía se ve lo mismo que sin el código ... setBackgroundDrawable).
Solución
¿Ha revisado este tutorial ? Al final de la página que habla de cómo crear un diálogo personalizado, y que podría ayudarle a poner una caja de diálogo de progreso spinner con sus propios fondos.
Otros consejos
No estoy seguro si hay una manera mejor, pero se podía conseguir la rueda de ruleta en su propia mediante el uso de un ProgressBar y establecer que sea interdeterminate. Si está utilizando un AbsoluteLayout se puede poner sobre otros puntos de vista. Esta disposición debe demostrar este método con XML:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout android:id="@+id/AbsoluteLayout"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ProgressBar android:id="@+id/ProgressBar"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:indeterminate="true" android:indeterminateOnly="true"
android:isScrollContainer="true" android:layout_x="100dip"
android:layout_y="10dip" android:soundEffectsEnabled="true"></ProgressBar>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello"
android:layout_gravity="center_horizontal" android:gravity="center_horizontal"
android:layout_y="25dip" />
</AbsoluteLayout>
Con el fin de crear un progreso pantalla completa en un fondo oscuro utilizo un FrameLayout y establecer la visibilidad de la RelativeLayout a visible cuando sea requerido o desaparecido cuando se realiza la operación de largo:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:padding="3dip" >
<!-- Your regular UI here -->
</LinearLayout>
</ScrollView>
<RelativeLayout
android:id="@+id/relativelayout_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:background="#aa000022" >
<ProgressBar
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateOnly="true" />
</RelativeLayout>
</FrameLayout>
La solución de Klarth trabajó para mí, gracias!
En mi caso he usado el layout_gravity para la colocación del centro de la progress_indicator, en lugar de utilizar las coordenadas explícitas.
<ProgressBar android:id="@+id/pb"
android:layout_width="40dp"
android:layout_height="40dp"
android:indeterminate="true"
android:indeterminateOnly="true"
android:isScrollContainer="true"
android:layout_gravity="center_vertical|center_horizontal"
android:soundEffectsEnabled="false"
/>