Android zeichnet eine horizontale Linie zwischen den Ansichten

105

Ich habe mein Layout wie folgt:

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

Meine Anforderung ist es, eine horizontale Linie zwischen TextViewund zu ziehenListView

Könnte jemand helfen?

String
quelle
Sie können dem Hintergrund vorhandener Ansichten eine Linie hinzufügen und keine zusätzliche hinzufügen. Oder Sie können alle Ihre Ansichten in listView einfügen. listView kann Trennzeichen zeichnen. Am einfachsten ist es, eine zusätzliche Ansicht hinzuzufügen.
Leonidos

Antworten:

285

Es wird eine silbergraue Linie zwischen TextView& gezogenListView

<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
quelle
10
Diese fest codierte Farbe ähnelt der Verwendung von Inline-CSS auf einer Webseite. Warum wird das so oft gewählt? Es sollte zum Beispiel android: background = "? Android: attr / dividerHorizontal" verwenden.
Roel
4
Weil es einfach zu implementieren ist
Denny
1
@Roel Es ist einfach, leicht und es funktioniert. Und es ist einfach, eine Farbe zu referenzieren, anstatt sie fest zu codieren. Ich habe Ihren Vorschlag ausprobiert, der meiner Meinung nach technisch besser wäre, aber er schien nicht zu funktionieren - ich habe keine Trennwände in meinen Layouts. Wie soll ich es benutzen? Danke dir.
Nsandersen
23

Sie sollten die neue leichte Ansicht verwenden, Spaceum Trennwände zu zeichnen. Ihr Layout wird schneller geladen, wenn Sie Spaceanstelle von verwenden View.

Horizontaler Teiler:

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

Vertikaler Teiler:

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

Sie können auch einen Hintergrund hinzufügen:

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

Anwendungsbeispiel:

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

Um zu verwenden Space, sollten Sie die Abhängigkeit in Ihrem build.gradle hinzufügen :

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

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

vovahost
quelle
11
Die Verwendung von Spacewird enttäuschend sein, da Spacenichts gezeichnet wird (nicht einmal ein Hintergrund). Die einzige Aufgabe besteht darin, Platz auf dem Bildschirm einzunehmen. Die Lösung besteht darin, Viewstattdessen ein Vanilleelement zu verwenden. Dann wird der Hintergrund wie gewünscht gezeichnet. (Sie können dann auch die Abhängigkeit der Unterstützungsbibliothek vermeiden, wenn sie nicht anderweitig benötigt wird.)
Ted Hopp
6
Spaceerbt von Viewund erbt daher alle durch definierten Attribute View. ( LinearLayoutErbt das textAlignmentAttribut auf ähnliche Weise, obwohl es selbst keinen Text anzeigt.) Testen Sie dies selbst (oder sehen Sie sich nur den Quellcode an), und Sie werden feststellen, dass a Spacealle zeichnungsbezogenen Attribute ignoriert.
Ted Hopp
Ja, Spacezeichnet keinen Hintergrund, er ist transparent.
Vovahost
21

Fügen Sie Ihrem Layout zwischen den Ansichten, die Sie trennen möchten, Folgendes hinzu:

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

Ich hoffe es hilft :)

zozelfelfo
quelle
2
Es wird eine vertikale Linie gezeichnet, da die Höhe match_parent und die Breite nur 2 dp beträgt.
Bhoomika Brahmbhatt
14

Es ist eine gute Idee, es einmal zu erstellen und überall dort zu verwenden, wo es benötigt wird. Fügen Sie dies in Ihre styles.xml ein:

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

und fügen Sie dies in Ihren XML-Code ein, wo ein Zeilenteiler benötigt wird:

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

Ursprünglich von toddles_fp auf diese Frage beantwortet: Android Drawing Separator / Divider Line im Layout?

onexf
quelle
9

Versuche dies

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider"/>
Xar-e-ahmer Khan
quelle
6
<View
       android:id="@+id/view"
       android:layout_width="match_parent"
       android:layout_height="2dp"
       android:background="#000000" />
Jitesh Dalsaniya
quelle
Können wir nicht programmgesteuert auf dieses Element zugreifen?
Gumuruh
2

Sie können diese Ansicht zwischen Ihre Ansichten setzen, um die Linie zu imitieren

<View
  android:layout_width="fill_parent"
  android:layout_height="2dp"
  android:background="#c0c0c0"/>
Karan Datwani
quelle
2

Versuchen Sie, dass dies für mich funktioniert

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

LinearLayoutFügen Sie in jedem übergeordneten Element, für das Sie Trennlinien zwischen Komponenten wünschen, android:divider="?android:dividerHorizontal"oder hinzuandroid:divider="?android:dividerVertical .

Wählen Sie entsprechend Ihrer Ausrichtung die entsprechende Option aus LinearLayout .

Bis ich weiß, wurde dieser Ressourcenstil von Android 4.3 hinzugefügt.

Ravi Bhatt
quelle
1

Versuche dies

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

Eine Ansicht, deren Hintergrundfarbe Sie angeben können, reicht aus (Höhe = einige dpi). Sah in echtem Code und hier ist es:

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

Beachten Sie, dass es jede Art von sein kann View.

18446744073709551615
quelle
0

----> Einfach

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

Wenn Sie keine zusätzliche Ansicht nur für Unterstreichungen verwenden möchten. Fügen Sie diesen Stil Ihrem hinzu textView.

style="?android:listSeparatorTextViewStyle"

Der Nachteil ist, dass zusätzliche Eigenschaften wie hinzugefügt werden

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

was Sie leicht überschreiben können.

Deepankar
quelle