2012-06-06 11 views
6

Tengo el siguiente diseño ...¿Por qué mi barra de progreso no está centrada 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> 

Y parece que este ... http: //i.stack.imgur.com/Ra5c6.png

quiero que el preloader centrarse verticalmente también, ¿qué está mal?

+0

androide: layout_width = "wrap_content" <--- intente establecer que a fill_parent – Guardanis

Respuesta

12

De alguna manera, el layout_gravity no funciona bien. Lo que hay que hacer es nido de la progress_bar en un linear_layout y establecer la gravedad de esa disposición al jardín central, así:

<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> 

No sugiero establecer la gravedad de la disposición lineal más alta, ya que podría tener divertida cosas que suceden si cambia la lista o agrega algo.

+0

No olvides hacer FrameLayout como diseño principal, de lo contrario se ocultarán otros diseños hermanos – NightFury

0

eso es porque está utilizando un LinearLayout, que sugieren que se utilice un RelativeLayout y tienen el centro attibute usando layout_centerVertical así:

<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

No sé cuánto espacio está su toma Listview pero es posible que desee utilizar un <RelativeLayout> en lugar de <LinearLayout> si realmente quiere definir dónde desea x elemento.

Espero que esto ayude.

0

Establezca android:gravity="center" en su matriz LinearLayout.

<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 que el uso que se incluso haría que la lista se centrara en el diseño. – Raykud

1

Parece haber algún problema con lo que está intentando hacer. ListView en la parte superior de la barra de progreso en su diseño puede tener una altura variable dependiendo de su contenido. Por lo tanto, no es posible garantizar que la barra de progreso permanezca en el centro de la pantalla mediante el diseño lineal.

Es posible que desee mirar la clase ProgressDialog que mostrará un cuadro de diálogo de progreso mientras carga datos en la lista en segundo plano.

Como alternativa, puede hacer ProgressBar y ListView solapamiento mediante el uso de RelativeLayout como el diseño de alto nivel y especificar android:layout_centerInParent="true" atributo para ProgressBar

+0

Ya lo usé, esos son feos. – johnblanco

Cuestiones relacionadas