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?


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

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


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


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?


9

Prueba esto

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

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

2

Prueba esto funciona para mi

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

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.


1

Prueba esto

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

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.


0

----> Simple

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.