2012-06-06 15 views
6

Ich habe folgendes Layout ...Warum ist mein Fortschrittsbalken nicht vertikal zentriert?

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

Und es sieht so aus ... http: //i.stack.imgur.com/Ra5c6.png

möchte ich die preloader auch vertikal zentriert sein, was ist falsch?

+0

android: layout_width = "wrap_content" <--- versuchen diese Einstellung – Guardanis

Antwort

12

Irgendwie funktioniert die Layoutgravitation nicht gut. Was Sie brauchen Nest zu tun ist, die progress_bar in einem linear_layout und die Schwere dieses Layout auf Mitte, wie folgt aus:

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

Ich schlage vor, nicht die Schwerkraft auf die oberste lineare Layout einstellen, weil Sie lustig haben könnte Dinge passieren, wenn Sie die Liste ändern oder etwas hinzufügen.

+0

Vergessen Sie nicht FrameLayout als Mutter Layout, auch andere Geschwister Layouts werden versteckt – NightFury

0

das ist, weil Sie eine LinearLayout verwenden, schlage ich vor, Sie verwenden ein RelativeLayout und haben die attibute Zentrum layout_centerVertical wie folgt aus:

<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

Ich weiß nicht, wie viel Speicherplatz Ihre Listview Einnahme ist aber Sie könnten einen <RelativeLayout> statt <LinearLayout> verwenden möchten, wenn Sie wirklich wollen, um definieren, wo Sie x Artikel möchten.

Hoffe, das hilft.

0

In Ihrem übergeordneten LinearLayout android:gravity="center" festlegen.

<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

Notiz fill_parent, dass mit, dass würde sogar die Liste im Layout zentrieren. – Raykud

1

Es scheint ein Problem mit dem, was Sie versuchen, zu tun. ListView über dem Fortschrittsbalken in Ihrem Layout kann je nach Inhalt eine variable Höhe haben. Es ist also nicht möglich, sicherzustellen, dass der Fortschrittsbalken in der Mitte des Bildschirms bleibt, wenn das lineare Layout verwendet wird.

Sie können sich die Klasse ProgressDialog ansehen, die einen Fortschrittsdialog anzeigt, während Sie Daten in die Liste im Hintergrund laden.

Alternativ können Sie ProgressBar- und Listview-Überlappung machen durch RelativeLayout als Top-Level-Layout verwenden und geben Sie android:layout_centerInParent="true" Attribut für ProgressBar

+0

ich bereits verwendet, dass Sie, die sind hässlich zu machen. – johnblanco

Verwandte Themen