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.