2013-05-15 11 views
7

Chciałbym dodać dopełnienie między KAŻDYM przedmiotem w widoku listy, ale chciałbym zachować domyślny dzielnik, ponieważ myślę, że jest estetycznie przyjemny. Wszystko, co szersze, wygląda brzydko.Jak dodać spację między przedmiotami w Androidzie?

Obecnie mam:

<com.example.practice.MyListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:drawSelectorOnTop="false" 
    android:layout_below="@id/name" /> 

Teraz Próbowałem za pomocą przejrzystego dzielnik, a to udaje się coraz odstępy chcę, ale potem nie widzę małą linię. A jeśli nie używam przezroczystego rozdzielacza, to mam ogromną, grubą, brzydką linię. Chcę zachować domyślną linię i po prostu dodać trochę odstępów w górnej części każdego elementu listy.

+3

Czy dopełnienie w pozycji listview xml –

+0

Spowoduje to dodanie tylko dopełnienie do góry i dołu całego ListView. Chcę, aby wystąpił w każdym elemencie listview. – worm

+0

Czy masz xml dla swojego przedmiotu listview? –

Odpowiedz

23

Nie byłbyś wtedy w stanie osiągnąć tego, co chcesz.

Krok pierwszy: Ustaw dzielnik tak przejrzyste, i sprawiają, że wysokość odrobinę większy:

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="8dp"/> 

Krok drugi: W celu osiągnięcia efektu „mała linia”, można dodać niestandardową rozciągliwej jako widoku listy element tła, powiedzmy element w widoku listy jest zdefiniowana jako „list_item.xml”:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
<-- Add a Custom background to the parent container of the listview items --> 
android:background="@drawable/list_item_selector" 
android:orientation="vertical" > 
<-- Rest of the item layout --> 
</LinearLayout> 

oczywiście, że przedmiot może być cokolwiek chcesz go mieć, moja jest:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

<item> 
    <shape 
    android:shape="rectangle"> 
     <stroke android:width="1dp" android:color="@color/bg_gray" /> 
     <solid android:color="@android:color/white" /> 
    </shape> 
</item> 
<item android:bottom="1dp"> 
    <shape 
     android:shape="rectangle"> 
     <stroke android:width="1dp" android:color="#FFDDDDDD" /> 
     <solid android:color="#00000000" /> 
    </shape> 
</item> 
</layer-list> 

Ale wtedy można wyłączyć efekt "Holo Selector", gdzie za każdym razem, gdy klikniesz lub podświetlisz element w widoku listy, pojawi się kolor Holo Blue, dlatego jeśli zauważysz na tle pozycji listy, nie zrobiliśmy tego Do użycia losowania listy warstw użyliśmy selektora o nazwie "list_item_selector".

Oto selektor, który korzysta z rozciągliwej liście warstw, gdy nie jest wciśnięty, a korzysta z Holo-niebieski kolor po naciśnięciu:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/list_item_bg2"   
    /> 
<item android:state_pressed="true" 
    android:drawable="@color/holo_blue" 
    /> 
</selector> 

EDIT dla komentarza

absolutnie możliwe, można zdefiniować ustawiona wysokość dla elementów widoku listy, jednak zaleca się ustawienie minimalnej wysokości, a nie predefiniowanej wysokości, która nigdy się nie zmienia.

powiedzieć, że to mój układ element listy:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/grid_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/grid_text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:gravity="center_vertical" 
    android:layout_toRightOf="@+id/grid_image" 
    android:minHeight="48dp" 
    android:padding="8dp" 
    android:textIsSelectable="false" /> 

</RelativeLayout> 

Wszystkie potrzebne byłoby

Krok pierwszy: Zdefiniuj wysokość min lub max wysokość, jak wolisz, w pliku dimens.xml zawarte w folderze values ​​/. Czemu? Ponieważ wysokość powinna zdecydowanie zmienić się w zależności od układu i można zdefiniować różne dimens.xml dla każdego gęstości urządzenia.

w dimens.xml, powiedzieć:

<resources> 

<!-- List Item Max and Min Height --> 

    <dimen name="list_item_min_height">48dp</dimen> 
    <dimen name="list_item_max_height">96dp</dimen> 
    <dimen name="list_item_set_height">64dp</dimen> 

</resources> 

a następnie użyć tych dwóch wartości dla rodzica LinearLayout o układ, który pozycji na liście.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/list_item_min_height" > 

I to wszystko na ten temat, teraz, aby wyśrodkować tekst, to jeszcze prostsze:

  • Jeśli używasz TextView i jest owinięta w RelativeLayout, przeznaczenie: android:layout_centerVertical="true"

  • Jeśli używasz LinearLayout, przeznaczenie: android:layout_gravity="center_vertical"

i połączenie z: UWAGA Działa to tylko wtedy, gdy nie ustawiono wysokości parametru wrap_content, w przeciwnym razie nie ma to znaczenia.

android:gravity="center_vertical" 

Nadzieję, że pomaga.

+0

Podoba mi się ten pomysł. Co powiesz na dodanie domyślnego rozmiaru dla każdego przedmiotu? I sprawiając, że tekst trafia do centrum? Czy będzie to możliwe? – worm

+0

Sprawdź edytowaną odpowiedź –

+0

Dobre rzeczy! Dzięki za pomoc. – worm

1

Nie wiem, czy dokładnie rozumiem twoje pytanie. Jeśli chcesz, aby dzielnik był przezroczysty, dzięki czemu zobaczysz spokój tła między każdym z nich: ListView, co daje rodzaj efektu 3D podczas przewijania. Można zrobić to w ten sposób:

W swojej list_item xml nadania LinearLayout kolor tła, który ma na przykład:

<LinearLayout 
android:id="@+id/listItem" 
android:layout_width="match_parent" 
android:layout_height="match_parent"  
android:padding="4dip" 
android:orientation="horizontal" 
android:background="#FFFFFF" 
> 

Następnie podać swoje ListView kolor tła takiego:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/fragmentListView" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:divider="@android:color/transparent" 
android:dividerHeight="8dip" 
android:background="#0000FF" 
android:cacheColorHint="@android:color/transparent" 
android:drawSelectorOnTop="true" 
/> 

Teraz twoje zwoje ListView przewija się na twoim tle.

Mam nadzieję, że tego właśnie chcesz.

0

Jest to rozwiązanie dla tych z Państwa, którzy robią , a nie, aby dzielnik był widoczny i nadal chce dodać więcej miejsca. Aby całkowicie pozbyć się dzielnika, ustaw go na @null i ustaw dividerHeight na 0dp. Oto ogólny ListView kopalni.

<ListView 
    android:id="@+id/myListView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ff0000" 
    android:divider="@null" 
    android:dividerHeight="0dp" 
    android:layout_alignLeft="@+id/txtMake" 
    android:layout_below="@+id/txtMake" 
    android:fadeScrollbars="false" 
    android:scrollbarThumbVertical="@drawable/scroll_bar_color" 
    android:scrollbarStyle="outsideInset" > 
</ListView> 

Następnie przejdź do pliku xml, w którym używasz adaptera, aby zapełnić swój listview. Przejdź do swojego kontenera (Przykład RelativeLayout ...) i po prostu dodaj poniższe.

android:layout_marginTop="15dp" 

To rzeczywiście doda miejsca dla tych, którzy nie używają rozdzielacza. W przeciwieństwie do wypełnienia, które tylko zwiększa rozmiar pudełka, zwiększy to odległość między poszczególnymi przedmiotami.

1

Innym sposobem na zwiększenie odstępów między elementami listy jest dodanie pustego widoku do kodu adaptera poprzez podanie atrybutu layout_height z wymaganym odstępem. Dla np. aby zwiększyć odstępy między elementami listy, dodaj ten pusty widok (pusty widok) na końcu elementów listy.

<View 
android:layout_width="match_parent" 
android:layout_height="15dp"/> 

Zapewni to odstęp 15 punktów między elementami widoku listy. Możesz dodać to bezpośrednio, jeśli układem macierzystym jest LinearLayout, a orientacja jest pionowa lub podejmij odpowiednie kroki dla innego układu.Nadzieję, że to pomaga :-)

0

można po prostu użyć dzielnika

patrz poniższy przykład

<ListView 
    android:id="@+id/activity_main_listview_data" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="10dp" 
    /> 

tutaj, w Androidzie: dzielnik można ustawić kolor lub uczynić to przejrzyste i dividerHeight for Dodaj spce między przedmiotami.

0

Wewnątrz znacznika ListView w pliku XML dodaj znacznik dividerHeight i nadaj mu wartość (odstęp między elementami listy).

Zapewni to odpowiednią przestrzeń między elementami listy.

Kod:

<ListView 
    android:id="@+id/listid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent" 
    android:divider="@drawable/divi" 
    android:dividerHeight="60dp"></ListView> 

teraz tworzyć rozciągliwej plik XML (w tym nazwa sprawa jest Divi). Wewnątrz dodaj znacznik stroke i nadaj mu szerokość i to, co można zrobić.

Kod:

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 
    <stroke 
     android:width="1dp" 
     android:color="#000000" 
     /> 
</shape> 
Powiązane problemy