Android rysuje poziomą linię między widokami

105

Mam mój układ jak poniżej:

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

<TextView
        android:id="@+id/textView1"
        style="@style/behindMenuItemLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Twitter Feeds"
        android:textStyle="bold" />

    <ListView
        android:id="@+id/list"
        android:layout_width="350dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/textView1"
        style="@style/behindMenuItemLabel1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="1dp"
        android:text="FaceBook Feeds" />

    <ListView
        android:id="@+id/list1"
        android:layout_width="350dp"
        android:layout_height="50dp" />

</LinearLayout>

Moim wymaganiem jest narysowanie poziomej linii między TextViewaListView

Czy ktoś mógłby pomóc?

Strunowy
źródło
Możesz dodać linię do tła istniejących widoków i nie dodawać dodatkowego. Lub możesz umieścić wszystkie swoje widoki wewnątrz listView. listView może rysować separatory. najprostszym sposobem jest dodanie dodatkowego widoku.
Leonidos

Odpowiedzi:

285

Będzie rysować Srebrnoszarą Linię pomiędzy TextView&ListView

<TextView
    android:id="@+id/textView1"
    style="@style/behindMenuItemLabel1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="1dp"
    android:text="FaceBook Feeds" />

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#c0c0c0"/>

<ListView
    android:id="@+id/list1"
    android:layout_width="350dp"
    android:layout_height="50dp" />
Bhoomika Brahmbhatt
źródło
10
Ten zakodowany na stałe kolor przypomina użycie wbudowanego css na stronie internetowej. Dlaczego to głosowanie jest tak wysokie? Powinien na przykład używać android: background = "? Android: attr / dividerHorizontal".
Roel
4
Ponieważ jest łatwy do wdrożenia
Denny
1
@Roel To jest proste, łatwe i działa. I łatwo jest odwołać się do koloru, zamiast go zakodować. Wypróbowałem twoją sugestię, która moim zdaniem byłaby lepsza technicznie, ale wydawało się, że nie zadziałała - nie dostałem żadnych separatorów w moich układach. Jak mam tego używać? Dziękuję Ci.
nsandersen
23

Do Spacerysowania separatorów należy używać nowego, lekkiego widoku . Twój układ będzie ładował się szybciej, jeśli użyjesz Spacezamiast View.

Przegroda pozioma:

<android.support.v4.widget.Space
        android:layout_height="1dp"
        android:layout_width="match_parent" /> 

Przegroda pionowa:

<android.support.v4.widget.Space
        android:layout_height="match_parent"
        android:layout_width="1dp" />

Możesz również dodać tło:

<android.support.v4.widget.Space
        android:layout_height="match_parent"
        android:layout_width="1dp"
        android:background="?android:attr/listDivider"/>

Przykład użycia:

....
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="One"/>

<android.support.v4.widget.Space
    android:layout_height="match_parent"
    android:layout_width="1dp"
    android:background="?android:attr/listDivider"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Two"/>

<android.support.v4.widget.Space
    android:layout_height="match_parent"
    android:layout_width="1dp"
    android:background="?android:attr/listDivider"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Three"/>
....

Aby z niego skorzystać Space, należy dodać zależność w pliku build.gradle :

dependencies {
    compile 'com.android.support:support-v4:22.1.+'
}

Dokumentacja https://developer.android.com/reference/android/support/v4/widget/Space.html

vovaost
źródło
11
Użycie Spacebędzie rozczarowujące, ponieważ Spacenic nie rysuje (nawet tła). Jedynym zadaniem jest zajęcie miejsca na ekranie. Rozwiązaniem jest użycie Viewzamiast tego elementu waniliowego . Następnie tło zostanie narysowane zgodnie z życzeniem. (Możesz także uniknąć zależności biblioteki wsparcia, jeśli nie jest to w inny sposób potrzebne.)
Ted Hopp
6
Spacedziedziczy po, Viewa zatem dziedziczy wszystkie atrybuty zdefiniowane przez View. (Podobnie, LinearLayoutdziedziczy textAlignmentatrybut, nawet jeśli sam nie wyświetla żadnego tekstu.) Możesz to przetestować samodzielnie (lub po prostu spojrzeć na kod źródłowy), a zobaczysz, że a Spaceignoruje wszystkie atrybuty związane z rysowaniem.
Ted Hopp,
Tak, Spacenie rysuje tła, jest przezroczyste.
vovaost
21

dodaj coś takiego w swoim układzie między widokami, które chcesz rozdzielić:

  <View
       android:id="@+id/SplitLine_hor1"
       android:layout_width="match_parent"
       android:layout_height= "2dp"
       android:background="@color/gray" />

Mam nadzieję, że to pomoże :)

zozelfelfo
źródło
2
Narysuje linię pionową, ponieważ jej wysokość to match_parent, a szerokość to tylko 2 dp.
Bhoomika Brahmbhatt
14

Stworzenie go raz i używanie go w razie potrzeby to dobry pomysł. Dodaj to w swoim styles.xml:

<style name="Divider">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">1dp</item>
    <item name="android:background">?android:attr/listDivider</item>
</style>

i dodaj to do swojego kodu xml, gdzie potrzebny jest separator linii:

<View style="@style/Divider"/>

Oryginalna odpowiedź od toddles_fp na to pytanie: Android Drawing Separator / Divider Line in Layout?

onexf
źródło
9

Spróbuj tego

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider"/>
Xar-e-ahmer Khan
źródło
6
<View
       android:id="@+id/view"
       android:layout_width="match_parent"
       android:layout_height="2dp"
       android:background="#000000" />
Jitesh Dalsaniya
źródło
czy nie możemy uzyskać dostępu do tego elementu programowo?
gumuruh
2

Możesz umieścić ten pogląd między swoimi poglądami, aby naśladować linię

<View
  android:layout_width="fill_parent"
  android:layout_height="2dp"
  android:background="#c0c0c0"/>
Karan Datwani
źródło
2

Spróbuj, to działa dla mnie

 <View android:layout_width="1dp"
       android:layout_height="match_parent"
       android:background="@color/tw_composer" />
Hiren Patel
źródło
1

W każdym rodzicu, LinearLayoutdla którego chcesz wstawić separatory między komponentami, dodaj android:divider="?android:dividerHorizontal"lub android:divider="?android:dividerVertical.

Wybierz odpowiednie między nimi zgodnie z orientacją LinearLayout.

Dopóki nie wiem, ten styl zasobów jest dodawany z Androida 4.3.

Ravi Bhatt
źródło
1

Spróbuj tego

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@android:color/darker_gray"/>
Mostafa Hassan
źródło
0

Widok, którego kolor tła możesz określić (wysokość = kilka dpi). Spojrzałem w prawdziwy kod i oto jest:

        <LinearLayout
            android:id="@+id/lineA"
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:background="#000000" />

Zauważ, że może to być dowolny rodzaj View.

18446744073709551615
źródło
0

----> Prosty

 <TextView
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#c0c0c0"
    android:id="@+id/your_id"
    android:layout_marginTop="160dp" />
shreedhar bhat
źródło
0

Jeśli nie chcesz używać dodatkowego widoku tylko do podkreślenia. Dodaj ten styl do swojego textView.

style="?android:listSeparatorTextViewStyle"

Wadą jest to, że doda dodatkowe właściwości, takie jak

android:textStyle="bold"
android:textAllCaps="true"

które możesz łatwo zmienić.

deepankar
źródło