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?


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

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


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


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?


9

Versuche dies

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

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

2

Versuchen Sie, dass dies für mich funktioniert

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

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.


1

Versuche dies

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

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.


0

----> Einfach

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.