2009-09-30 10 views
15

Naprawdę wyciągam włosy z tego. Niektóre tła. Mam listę przedmiotów, które mają obok siebie pola wyboru. Po usunięciu zaznaczenia pola wyboru pojawia się przycisk umożliwiający usunięcie elementu z listy. To wydaje się do tyłu, ale w pierwszym chcemy tylko „wybranych” przedmioty, aby kwalifikować się do dalszej obróbki, itd. To jest mój układ:Centrowanie układu Android w RelativeLayout dla niestandardowego ListView

<RelativeLayout android:id="@+id/rlBlahBlah" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:minHeight="?android:attr/listPreferredItemHeight" 
       xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBox android:text="" 
      android:id="@+id/cbDeleteItem" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:focusable="false" 
      /> 
    <TextView android:text="" 
      android:id="@+id/tvItemText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="14dip" 
      android:paddingLeft="3dip" 
      android:paddingRight="3dip" 
      android:paddingTop="13dip" 
      android:gravity="fill_vertical" 
      android:layout_toRightOf="@id/cbDeleteItem" 
      /> 
    <Button android:layout_height="wrap_content" 
      android:id="@+id/btnDelete" 
      android:text="Delete" 
      android:layout_width="wrap_content" 
      android:layout_alignParentRight="true" 
      android:gravity="center_vertical" 
      android:focusable="false" 
      /> 
</RelativeLayout> 

nie mogę dostać 3 pozycji centrum pionowo w moim wierszu, aby ocalić swoje życie . layout_gravity, gravity, layout_centerVertical, żaden z nich nie działa. Jestem pewien, że moim problemem jest jakieś małe ustawienie, które można gdzieś przesunąć, ale naprawdę mam na tym koniec.

edit: Wiem, że tekst jest "fill_vertical", to jakieś przypadkowe rzeczy, które próbowałem.

+0

Czy próbowali zabawy z grawitacją stosowania atrybutów do macierzystej widzenia RelativeLayout? Warto strzelić. – Konklone

Odpowiedz

24

Twój problem nie jest prawdopodobnie ze względu na układ, ale jak jesteś pompowania układ. W rzeczywistości może to być nawet moja wina, w zależności od tego, gdzie się nauczyłeś swoją technikę ...

zacytować wszechobecny Romain Guy:

prawidłowe wykorzystanie nadmuchać() w adapterów:

inflate (layoutId, parent, false);

Przechodząc dominującej (podawana jako parametr w getView()) pozwala UI zestaw narzędzi do tworzenia odpowiednich LayoutParams sprzeciwu. Przekazywanie fałszywego numeru mówi zestawowi narzędzi, aby NIE dzwonił pod numer parent.addView (theInflateChild), ponieważ ListView wykona swoją własną magię później: .

Jeśli używasz inflate(layoutId, null), jak już tradycyjnie zaleca, życie jest OK, chyba spróbować użyć RelativeLayout jak układ bazowej wierszy i spróbuj użyć pionowego centrowania.

Będę aktualizować moje książki i takie, które będą odzwierciedlać nową radę w nadchodzących tygodniach.

+0

Używam w rzeczywistości twojej techniki: P Przeczytałem także post od Romain Guy stwierdzający, że RelativeLayout ignoruje atrybuty layout_gravity. Zamieszczam odpowiedź z nowym układem, który robi dokładnie to, co chcę. Dziękuję za odpowiedź! – MattC

+0

Dzięki, uratowałeś mój dzień! –

1

Czy próbowałeś android: grawitację = „center_horizontal” jako odwołanie here

+0

Szukam pionowego centrowania w ramach układu. – MattC

+0

Istnieje tam także numer_centryczny. – Carnell

+0

przyciąganie grawitacyjne przedmiotów w sobie, jak znalazłem. To, czego chciałem, to layout_gravity, ale według jakiegoś postu autorstwa Romain Guy, który przeczytałem, RelativeLayout kończy ignorowanie layout_gravity – MattC

2

Oto układ, który zakończył się robieniem dokładnie tego, co chciałem. Porzuciłem RelativeLayout, gdy dowiedziałem się, że ignoruje atrybuty layout_gravity (oczywiście, że nie mogę znaleźć tego postu). Tak czy inaczej, zagnieżdżone LinearLayouts wystarczyły dla mnie:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:id="@+id/llBlahBlahRowMain" 
    android:padding="6dip"> 
    <CheckBox android:text="" 
       android:id="@+id/cbDeleteItem" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:focusable="false" 
       /> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="center_vertical" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:text="blah blah dynamically replaced text" 
      android:id="@+id/tvItemText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:textSize="14dip" 
      android:paddingLeft="3dip" 
      android:layout_gravity="center_vertical" 
      /> 
    </LinearLayout> 
    <Button android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btnDelete" 
      android:text="Delete" 
      android:layout_gravity="center_vertical" 
      android:focusable="false" 
      /> 
</LinearLayout> 
16

Korzystanie RelativeLayout, nie miałem szczęścia z grawitacji ani layout_gravity.

Ale dla mnie pracowałem pod pozycją android:layout_centerVertical="true" umieszczoną w dziecku mojego RelativeLayout, więc możesz ją zachować, jeśli potrzebujesz.

+0

Bingo! Naprawiono mój problem. Dzięki. – user1139880

59

Atrybut ten pracował dla mnie centrowania Button użyciu RelativeLayout:

android:layout_centerInParent="true" 

Zobacz ten komentarz: Can you center a Button in RelativeLayout?

+1

Dziękuję, czasami warto przeczytać niską ocenę odpowiedzi. – tjb

+0

Najlepsza odpowiedź na to, znalazłem – Albinoswordfish

+1

Dziękuję bardzo, to powinna być naprawdę zaakceptowana odpowiedź. –

1

zrobiłem alternatywne rozwiązanie, które pracowały dla mnie. Na moim elemencie pola tekstowego umieszczam właściwość android: layout_height = "fill_parent". W ten sposób element tekstowy napełnił cały hieght rodzica, więc zawartość zostały wyrównane :)

<TextView android:id="@+id/principal_li_descricao" 
    android:layout_height="fill_parent" 
    android:layout_width="wrap_content" 
    android:layout_marginLeft="10dip" 
    android:textColor="#ff000000" 
    android:layout_centerVertical="true" 
    android:gravity="center_vertical" 
    android:layout_alignBottom="@+id/principal_li_icone" 
    android:layout_toRightOf="@+id/principal_li_icone"/> 

Dzięki

Powiązane problemy