Android traccia una linea orizzontale tra le viste


105

Ho il mio layout come di seguito:

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

Il mio requisito è disegnare un orizzontale linea tra TextVieweListView

Qualcuno potrebbe aiutare?


Puoi aggiungere una linea allo sfondo delle viste esistenti e non aggiungerne una extra. Oppure puoi mettere tutte le tue visualizzazioni all'interno di listView. listView può disegnare separatori. il modo più semplice è aggiungere una vista extra.
Leonidos

Risposte:


285

Disegnerà una linea di colore grigio argento tra 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
Questo colore hardcoded è come usare CSS inline in una pagina web. Perché questo è votato così tanto? Ad esempio, dovrebbe utilizzare android: background = "? Android: attr / dividerHorizontal".
Roel

4
Perché è facile da implementare
Denny

1
@Roel È semplice, facile e funziona. Ed è semplice fare riferimento a un colore invece di codificarlo. Ho provato il tuo suggerimento, che penso sarebbe tecnicamente migliore, ma non sembra funzionare - non ho inserito alcun divisore nei miei layout. Come dovrei usarlo? Grazie.
nsandersen

23

Dovresti usare la nuova vista leggera Spaceper disegnare i divisori. Il layout verrà caricato più velocemente se utilizzerai al Spaceposto di View.

Divisore orizzontale:

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

Divisore verticale:

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

Puoi anche aggiungere uno sfondo:

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

Esempio di utilizzo:

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

Per usarlo Spacedovresti aggiungere la dipendenza nel tuo build.gradle :

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

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


11
L'uso di Spacesarà deludente perché Spacenon disegna nulla (nemmeno uno sfondo). Il suo unico compito è occupare spazio sullo schermo. La soluzione è usare invece un Viewelemento vaniglia . Quindi lo sfondo verrà disegnato come desiderato. (Puoi anche evitare la dipendenza dalla libreria di supporto se non è altrimenti necessario.)
Ted Hopp

6
Spaceeredita da Viewe quindi eredita tutti gli attributi definiti da View. (Allo stesso modo, LinearLayouteredita l' textAlignmentattributo anche se non visualizza alcun testo.) Sentiti libero di testarlo tu stesso (o semplicemente guarda il codice sorgente) e scoprirai che a Spaceignora tutti gli attributi relativi al disegno.
Ted Hopp

Sì, Spacenon disegna uno sfondo, è trasparente.
vovahost

21

aggiungi qualcosa di simile nel tuo layout tra le visualizzazioni che desideri separare:

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

Spero che sia d'aiuto :)


2
Disegnerà una linea verticale poiché la sua altezza è match_parent e la larghezza è di soli 2 dp.
Bhoomika Brahmbhatt

14

Crearlo una volta e usarlo dove necessario è una buona idea. Aggiungi questo nel tuo 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>

e aggiungilo nel tuo codice xml, dove è necessario un divisore di riga:

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

Risposta originale di toddles_fp a questa domanda: Android Drawing Separator / Divider Line in Layout?


9

Prova questo

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

non possiamo accedere a questo elemento in modo programmatico?
gumuruh

2

Puoi mettere questa vista tra le tue opinioni per imitare la linea

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

2

Prova questo funziona per me

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

1

In ogni genitore LinearLayoutper il quale desideri divisori tra i componenti, aggiungi android:divider="?android:dividerHorizontal"o android:divider="?android:dividerVertical.

Scegli appropriato tra di loro secondo l'orientamento del tuo LinearLayout.

Fino a quando non lo saprò, questo stile di risorsa è stato aggiunto da Android 4.3.


1

Prova questo

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

0

Una vista il cui colore di sfondo è possibile specificare andrebbe bene (altezza = pochi dpi). Sembrava in codice reale ed eccolo qui:

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

Nota che potrebbe essere qualsiasi tipo di file View.


0

----> Semplice

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

0

Se non vuoi usare una vista extra solo per le sottolineature. Aggiungi questo stile al tuo textView.

style="?android:listSeparatorTextViewStyle"

L'unico inconveniente è che aggiungerà proprietà extra come

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

che puoi facilmente sostituire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.