2012-06-06 12 views
6

Ho la seguente disposizione ...Perché la barra di avanzamento non è centrata verticalmente?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/bg_generic_portrait"> 
    <ListView android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@drawable/issue_list_item_background_normal" 
      android:listSelector="@drawable/issue_background_selector" 
      android:divider="@drawable/separator" 
    > 
    </ListView> 
    <ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:id="@+id/preloader" 
    style="@android:style/Widget.ProgressBar.Large"/> 

    <TextView android:id="@android:id/empty" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="#FF0000"/> 
</LinearLayout> 

E sembra che questo ... http: //i.stack.imgur.com/Ra5c6.png

voglio il preloader per essere centrato anche verticalmente, cosa c'è che non va?

+0

android: layout_width = "wrap_content" <--- provare a impostare che a fill_parent – Guardanis

risposta

12

In qualche modo il layout_gravity non funziona bene. Quello che dovete fare è il nido progress_bar in un linear_layout e impostare la gravità che il layout al centro, in questo modo:

<LinearLayout android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center"> 
<ProgressBar 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/preloader" 
      style="@android:style/Widget.ProgressBar.Large"/> 
</LinearLayout> 

Io non suggerisco di impostare la gravità per il layout lineare, più in alto, perché si potrebbe avere divertente le cose accadono se cambi la lista o aggiungi qualcosa.

+0

Non dimenticare di rendere FrameLayout come layout principale, altrimenti altri layout di pari livello saranno nascosti – NightFury

0

thats perché si sta utilizzando un LinearLayout, io suggerisco di usare un RelativeLayout e avere il centro attibute utilizzando layout_centerVertical come questo:

<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_centerVertical="true" 
    android:id="@+id/preloader" 
    style="@android:style/Widget.ProgressBar.Large"/> 
0

Non so quanto spazio è la tua presa Listview ma potresti voler usare un <RelativeLayout> invece di <LinearLayout> se vuoi veramente definire dove vuoi x articolo.

Spero che questo aiuti.

0

Impostare android:gravity="center" nel LinearLayout principale.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:gravity="center" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
+0

nota che l'utilizzo che renderebbe anche la lista centrata nel layout. – Raykud

1

Sembra che ci sia qualche problema con quello che stai cercando di fare. ListView sulla barra di avanzamento del tuo layout può avere un'altezza variabile a seconda del suo contenuto. Pertanto, non è possibile garantire che la barra di avanzamento rimanga al centro dello schermo utilizzando il layout lineare.

Si consiglia di esaminare la classe ProgressDialog che mostrerà una finestra di dialogo di avanzamento mentre si caricano i dati in un elenco in background.

In alternativa, è possibile effettuare ProgressBar e ListView si sovrappongono utilizzando RelativeLayout come il layout di alto livello e specificare l'attributo android:layout_centerInParent="true" per ProgressBar

+0

L'ho già usato, quelli sono brutti. – johnblanco

Problemi correlati