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?


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

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


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


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?


9

Spróbuj tego

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider"/>

6
<View
       android:id="@+id/view"
       android:layout_width="match_parent"
       android:layout_height="2dp"
       android:background="#000000" />

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

2

Spróbuj, to działa dla mnie

 <View android:layout_width="1dp"
       android:layout_height="match_parent"
       android:background="@color/tw_composer" />

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.


1

Spróbuj tego

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@android:color/darker_gray"/>

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.


0

----> Prosty

 <TextView
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#c0c0c0"
    android:id="@+id/your_id"
    android:layout_marginTop="160dp" />

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.