Android рисует горизонтальную линию между видами

105

У меня есть мой макет, как показано ниже:

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

Мое требование - провести горизонтальную линию между TextViewиListView

Может ли кто-нибудь помочь?

Строка
источник
Вы можете добавить строку к фону существующего представления и не добавлять лишнюю. Или вы можете поместить все свои представления в listView. listView может рисовать разделители. Самый простой способ - добавить дополнительный вид.
Леонидос 01

Ответы:

285

Он будет рисовать серебристо-серую линию между 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
Этот жестко запрограммированный цвет похож на использование встроенного CSS на веб-странице. Почему за это так проголосовали? Например, он должен использовать android: background = "? Android: attr / dividerHorizontal".
Роэл
4
Потому что это легко реализовать
Денни
2
@Roel Это просто, легко и работает. И просто указать цвет вместо жесткого кодирования. Я попробовал ваше предложение, которое, на мой взгляд, было бы технически лучше, но оно не сработало - в моих макетах не было никаких разделителей. Как мне его использовать? Спасибо.
nsandersen 04
23

Вы должны использовать новый облегченный вид Spaceдля рисования разделителей. Ваш макет будет загружаться быстрее, если вы будете использовать Spaceвместо View.

Горизонтальный разделитель:

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

Вертикальный разделитель:

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

Вы также можете добавить фон:

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

Чтобы использовать, Spaceвы должны добавить зависимость в свой build.gradle :

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

Документация https://developer.android.com/reference/android/support/v4/widget/Space.html

вовахост
источник
11
Использование Spaceбудет разочаровывающим, потому что Spaceничего не рисует (даже фон). Его единственная задача - занимать место на экране. Решение - использовать Viewвместо этого ванильный элемент. Тогда фон будет прорисован по желанию. (Вы также можете избежать зависимости от библиотеки поддержки, если она не нужна)
Тед Хопп,
6
Spaceнаследуется от Viewи, следовательно, наследует все атрибуты, определенные в View. (Точно так же LinearLayoutнаследует textAlignmentатрибут, даже если сам по себе не отображает никакого текста.) Не стесняйтесь проверить это на себе (или просто посмотрите исходный код), и вы обнаружите, что a Spaceигнорирует все атрибуты, связанные с рисованием.
Тед Хопп,
Да, Spaceфон не рисует, он прозрачный.
vovahost
21

добавьте что-то подобное в свой макет между видами, которые вы хотите разделить:

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

Надеюсь, поможет :)

Zozelfelfo
источник
2
Он будет рисовать вертикальную линию, так как ее высота соответствует match_parent, а ширина всего 2 dp.
Bhoomika Brahmbhatt 01
14

Создать его один раз и использовать везде, где это необходимо, - хорошая идея. Добавьте это в свой файл 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>

и добавьте это в свой xml-код, где необходим разделитель строк:

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

Первоначально toddles_fp ответил на этот вопрос: Android Drawing Separator / Divider Line in Layout?

onexf
источник
9

Попробуй это

<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" />
Джитеш Далсания
источник
мы не можем получить доступ к этому элементу программно?
gumuruh
2

Вы можете поместить этот вид между видами, чтобы имитировать линию

<View
  android:layout_width="fill_parent"
  android:layout_height="2dp"
  android:background="#c0c0c0"/>
Каран Датвани
источник
2

Попробуйте, это работает для меня

 <View android:layout_width="1dp"
       android:layout_height="match_parent"
       android:background="@color/tw_composer" />
Хирен Патель
источник
1

В каждом родительском элементе, LinearLayoutдля которого вы хотите разделители между компонентами, добавьте android:divider="?android:dividerHorizontal"или android:divider="?android:dividerVertical.

Выберите подходящий вариант согласно вашей ориентации LinearLayout.

Насколько я знаю, этот стиль ресурса добавлен из Android 4.3.

Рави Бхатт
источник
1

Попробуй это

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@android:color/darker_gray"/>
Мостафа Хасан
источник
0

Подойдет View, цвет фона которого вы можете указать (высота = несколько точек на дюйм). Посмотрел в реальном коде и вот он:

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

Обратите внимание, что это может быть любой тип файла View.

18446744073709551615
источник
0

----> Простой

 <TextView
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#c0c0c0"
    android:id="@+id/your_id"
    android:layout_marginTop="160dp" />
Шридхар Бхат
источник
0

Если вы не хотите использовать дополнительный вид только для подчеркивания. Добавьте этот стиль в свой textView.

style="?android:listSeparatorTextViewStyle"

С другой стороны, он добавит дополнительные свойства, такие как

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

которые вы можете легко переопределить.

Deepankar
источник