2010-03-09 18 views
6

Mi piacerebbe mostrare una sovrapposizione "ruota" modale sulla mia vista.Android: come creare una sovrapposizione "rotella" avanzamento modale?

ProgressDialog si avvicina, ma non desidero lo sfondo della finestra di dialogo o il bordo.

ho provato a fissare drawable sfondo della finestra di dialogo:

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(); 

ma senza alcun risultato (cioè sembra ancora la stessa senza il codice di ... setBackgroundDrawable).

+0

caso forse repulsare la risposta giusta sembra che quella scelta sia un puntatore al tutorial, quello a cui tutti stanno votando ha un esempio migliore. – JPM

risposta

1

Avete controllato questo tutorial? Alla fine della pagina si parla di come creare una finestra di dialogo personalizzata, e questo potrebbe aiutarti a mettere una finestra di dialogo di avanzamento della filatura con i tuoi sfondi personali.

12

Non sono sicuro se c'è un modo migliore, ma è possibile ottenere la rotella da sola utilizzando uno ProgressBar e impostandolo per essere interdeterminato. Se stai usando un AbsoluteLayout puoi metterlo sopra altre viste. Questo layout dovrebbe dimostrare questo metodo 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> 
+1

Grazie, sono sicuro che anche questo funzionerebbe, quindi ho votato, ma ho optato per l'altra soluzione poiché era più semplice da implementare. –

+0

Solo per tutti nuovi a questa domanda. AbsoluteLayout è deprecato dal livello API 3. Cosa significa per voi ragazzi. –

+0

Poiché AbsoluteLayout è stato rimosso, utilizzare FrameLayout per posizionare le cose una sopra l'altra come nella risposta EZD. – antix

3

La soluzione di Klarth ha funzionato per me, grazie!

Nel mio caso ho usato il layout_gravity per il posizionamento centrale dell'indicatore progress_ anziché utilizzare le coordinate esplicite.

<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" 
     /> 
9

Al fine di creare un progresso a schermo intero su uno sfondo buio io uso un FrameLayout e impostare la visibilità del RelativeLayout al visibile quando richiesto o passati, quando la lunga operazione viene eseguita:

<?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> 
+3

Mi piace molto l'idea di questo, abbastanza facile da implementare. Raccomando solo di aggiungere un 'OnTouchEventListener' al RelativeLayout che restituisce true, in modo che i tuoi eventi touch non vengano passati al FrameLayout sottostante. – Griddo

+0

un'altra soluzione è rendere FrameLayout 'android: clickable =" true "' – bgs

Problemi correlati