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 може малювати роздільники. найпростіший спосіб - це додати додатковий вигляд.
Леонідос

Відповіді:


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 / delierHorizontal".
Roel

4
Тому що це легко здійснити
Денні

1
@Roel Це просто, легко і працює. І просто посилатись на колір замість жорсткого кодування. Я спробував вашу пропозицію, яка, на мою думку, була б технічно кращою, але, здавалося, не вийшло - у мене не було ніяких роздільників. Як я повинен його використовувати? Дякую.
nsandersen

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атрибут, навіть якщо він сам не відображає жодного тексту.) Не соромтеся перевірити це на собі (або просто подивіться на вихідний код), і ви побачите, що Spaceігнорує всі атрибути, пов'язані з малюванням.
Тед Хопп

Так, Spaceфон не малює, він прозорий.
vovahost

21

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

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

Сподіваюся, це допомагає :)


2
Він намалюватиме вертикальну лінію, оскільки її висота відповідає рівню, а ширина - лише 2 dp.
Bhoomika Brahmbhatt

14

Створити його один раз і використовувати його там, де потрібно - це гарна ідея. Додайте це до своїх стилів.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 Роздільник / Роздільна лінія в макеті?


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.



0

Вид, колір тла якого можна вказати (висота = кілька точок на дюйм). Подивився в реальний код і ось він:

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