Android dibuja una línea horizontal entre las vistas

105

Tengo mi diseño como a continuación:

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

Mi requisito es dibujar una línea horizontal entre TextViewyListView

¿Alguien podría ayudar?

Cuerda
fuente
Puede agregar una línea al fondo de las vistas existentes y no agregar una adicional. O puede poner todas sus vistas dentro de listView. listView puede dibujar separadores. La forma más sencilla es agregar una vista adicional.
Leonidos

Respuestas:

285

Dibujará una línea de color gris plateado entre 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
fuente
10
Este color codificado es como usar CSS en línea en una página web. ¿Por qué se vota tanto? Debería usar android: background = "? Android: attr / dividerHorizontal" por ejemplo.
Roel
4
Porque es fácil de implementar
Denny
1
@Roel Es simple, fácil y funciona. Y es sencillo hacer referencia a un color en lugar de codificarlo. Probé tu sugerencia, que creo que sería técnicamente mejor, pero no pareció funcionar; no obtuve ningún divisor en mis diseños. ¿Cómo debo usarlo? Gracias.
nsandersen
23

Debería utilizar la nueva Vista ligera Spacepara dibujar divisores. Su diseño se cargará más rápido si usa en Spacelugar de View.

Divisor horizontal:

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

Divisor vertical:

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

También puede agregar un fondo:

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

Ejemplo de uso:

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

Para usarlo Space, debe agregar la dependencia en su build.gradle :

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

Documentación https://developer.android.com/reference/android/support/v4/widget/Space.html

vovahost
fuente
11
El uso de Spaceva a ser decepcionante porque Spaceno dibuja nada (ni siquiera un fondo). Su único trabajo es ocupar espacio en la pantalla. La solución es usar un Viewelemento de vainilla en su lugar. Luego, el fondo se dibujará como desee. (También puede evitar la dependencia de la biblioteca de soporte si no es necesaria de otro modo).
Ted Hopp
6
Spacehereda Viewy por lo tanto hereda todos los atributos definidos por View. (De manera similar, LinearLayouthereda el textAlignmentatributo aunque no muestre ningún texto). Siéntase libre de probar esto usted mismo (o simplemente mire el código fuente) y encontrará que Spaceignora todos los atributos relacionados con el dibujo.
Ted Hopp
Sí, Spaceno dibuja un fondo, es transparente.
vovahost
21

agregue algo como esto en su diseño entre las vistas que desea separar:

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

Espero eso ayude :)

zozelfelfo
fuente
2
Dibujará una línea vertical ya que su altura coincide con el padre y el ancho es de solo 2 dp.
Bhoomika Brahmbhatt
14

Crearlo una vez y usarlo donde sea necesario es una buena idea. Agregue esto en su 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>

y agregue esto en su código xml, donde se necesita un divisor de línea:

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

Originalmente respondida por toddles_fp a esta pregunta: ¿ Separador de dibujo de Android / Línea divisoria en el diseño?

onexf
fuente
9

Prueba esto

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider"/>
Xar-e-ahmer Khan
fuente
6
<View
       android:id="@+id/view"
       android:layout_width="match_parent"
       android:layout_height="2dp"
       android:background="#000000" />
Jitesh Dalsaniya
fuente
¿No podemos acceder a este elemento programáticamente?
gumuruh
2

Puede poner esta vista entre sus vistas para imitar la línea

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

Prueba esto funciona para mi

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

En cada padre LinearLayoutpara el que desee divisores entre componentes, agregue android:divider="?android:dividerHorizontal"o android:divider="?android:dividerVertical.

Elija el apropiado entre ellos según la orientación de su LinearLayout.

Hasta que yo sepa, este estilo de recurso se agrega desde Android 4.3.

Ravi Bhatt
fuente
1

Prueba esto

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

Una Vista cuyo color de fondo puede especificar sería suficiente (altura = unos pocos ppp). Visto en código real y aquí está:

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

Tenga en cuenta que puede ser de cualquier tipo View.

18446744073709551615
fuente
0

----> Simple

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

Si no desea utilizar una vista adicional solo para subrayados. Agregue este estilo en su textView.

style="?android:listSeparatorTextViewStyle"

El único inconveniente es que agregará propiedades adicionales como

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

que puede anular fácilmente.

deepankar
fuente