Android desenha uma linha horizontal entre as visualizações

105

Eu tenho Meu Layout como abaixo:

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

Meu requisito é desenhar uma linha horizontal entre TextVieweListView

Alguém poderia ajudar?

Corda
fonte
Você pode adicionar uma linha ao plano de fundo de visualizações existentes e não adicionar uma linha extra. Ou você pode colocar todas as suas visualizações dentro de listView. listView pode desenhar separadores. maneiras mais simples é adicionar uma visão extra.
Leonidos,

Respostas:

285

Irá desenhar uma linha de cor cinza prateado 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
fonte
10
Essa cor codificada é como usar css embutido em uma página da web. Por que isso é tão votado? Ele deve usar android: background = "? Android: attr / dividerHorizontal" por exemplo.
Roel
4
Porque é fácil de implementar
Denny
1
@Roel É simples, fácil e funciona. E é fácil fazer referência a uma cor em vez de codificá-la. Tentei sua sugestão, que acho que seria tecnicamente melhor, mas não pareceu funcionar - não recebi divisórias em meus layouts. Como devo usar? Obrigado.
nsandersen
23

Você deve usar a nova vista leve Spacepara desenhar divisórias. Seu layout carregará mais rápido se você usar em Spacevez de View.

Divisória horizontal:

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

Divisória vertical:

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

Você também pode adicionar um plano de fundo:

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

Exemplo 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 usar, Spacevocê deve adicionar a dependência em seu build.gradle :

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

Documentação https://developer.android.com/reference/android/support/v4/widget/Space.html

vovahost
fonte
11
O uso de Spacevai ser decepcionante porque Spacenão desenha nada (nem mesmo um fundo). Sua única função é ocupar espaço na tela. A solução é usar um Viewelemento vanilla . Em seguida, o plano de fundo será desenhado como desejado. (Você também pode evitar a dependência da biblioteca de suporte se não for necessário de outra forma.)
Ted Hopp
6
Spaceherda de Viewe, portanto, herda todos os atributos definidos por View. (Da mesma forma, LinearLayoutherda o textAlignmentatributo mesmo que ele próprio não exiba nenhum texto.) Sinta-se à vontade para testar você mesmo (ou apenas olhe o código-fonte) e você verá que a Spaceignora todos os atributos relacionados ao desenho.
Ted Hopp de
Sim, Spacenão desenha um fundo, é transparente.
vovahost
21

adicione algo assim em seu layout entre as visualizações que deseja separar:

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

Espero que ajude :)

Zozelfelfo
fonte
2
Ele desenhará uma linha vertical, pois sua altura é match_parent e a largura é de apenas 2 dp.
Bhoomika Brahmbhatt
14

Criá-lo uma vez e usá-lo sempre que necessário é uma boa ideia. Adicione isto em seu 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 adicione isso ao seu código xml, onde um divisor de linha é necessário:

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

Originalmente respondido por toddles_fp a esta pergunta: Android Drawing Separator / Divider Line in Layout?

onexf
fonte
9

Tente isto

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider"/>
Xar-e-ahmer Khan
fonte
6
<View
       android:id="@+id/view"
       android:layout_width="match_parent"
       android:layout_height="2dp"
       android:background="#000000" />
Jitesh Dalsaniya
fonte
não podemos acessar este elemento programaticamente?
gumuruh
2

Você pode colocar essa visão entre as suas para imitar a linha

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

Tente isso funciona para mim

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

Em cada pai LinearLayoutpara o qual deseja divisores entre os componentes, adicione android:divider="?android:dividerHorizontal"ou android:divider="?android:dividerVertical.

Escolha apropriado entre eles de acordo com a orientação de seu LinearLayout.

Até que eu saiba, esse estilo de recurso foi adicionado do Android 4.3.

Ravi Bhatt
fonte
1

Tente isto

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

Uma Visualização cuja cor de fundo você pode especificar faria (altura = alguns dpi). Olhado em código real e aqui está:

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

Observe que pode ser qualquer tipo de View.

18446744073709551615
fonte
0

----> Simples

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

Se você não quiser usar uma visualização extra apenas para sublinhados. Adicione este estilo ao seu textView.

style="?android:listSeparatorTextViewStyle"

A desvantagem é que adicionará propriedades extras, como

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

que você pode facilmente substituir.

Deepankar
fonte