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

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


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?



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.



0

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

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

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


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"

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.