Як додати (вертикальний) дільник до горизонтального LinearLayout?


92

Я намагаюся додати дільник до горизонтального лінійного макета, але нікуди не діваюся. Розділювач просто не відображається. Я абсолютно новачок в Android.

Це мій макет XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/llTopBar"
        android:orientation="horizontal"
        android:divider="#00ff00"
        android:dividerPadding="22dip"
        android:showDividers="middle"
       >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="asdf" />
            <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="asdf"
             />

    </LinearLayout>

</RelativeLayout>

На якій версії Android ви використовуєте це? setDividerDrawable існує лише з API 11
alex

желейний боб 4.2 квітня 17
Ахмед-Анас

Якщо ви пробували все інше, переконайтеся, що LinearLayout має правильну орієнтацію. Встановлення висоти для перегородки з горизонтальною орієнтацією буде дуже заплутаним.
Ніно ван Гоофф

1
не забувайте обурюючий пункт SHOWDIVIDERS !!!!!!
Fattie

Відповіді:


217

використовуйте це для горизонтального дільника

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="@color/honeycombish_blue" />

і це для вертикального дільника

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/honeycombish_blue" />

АБО якщо ви можете використовувати дільник LinearLayout, для горизонтального дільника

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:height="1dp"/>
    <solid android:color="#f6f6f6"/>
</shape>

і в LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@drawable/divider"
    android:orientation="vertical"
    android:showDividers="middle" >

Якщо ви хочете користуватися вертикальним роздільником, то замість android:height="1dp"форми використовуйтеandroid:width="1dp"

Порада: не забувайте про android:showDividersпредмет.


3
Дякую. але як я додаю це до атрибута "android: spliter"? в основному, я маю на увазі якийсь автоматичний спосіб додати дільник між кожним елементом? Я маю на увазі хіба не тому атрибут android: spliter?
Ахмед-Анас

@ death_relic0 android: роздільник - це неприємно для ListView, розгортається Listview та TabWidget
Падма Кумар,

9
спасибі, але чому це тоді тут: s developer.android.com/reference/android/widget/…
Ахмед-Анас

Здається, ви повинні використовувати будь-який малювальний, а не кольоровий
demaksee

7
Здається, ви змішали своє layout_widthі layout_heightзначення змішали: бо горизонтальне layout_widthповинно бути "fill_parent"і layout_heightповинно бути "1dp". Потрібно поміняти таким же чином вертикальний перегородку.
Джей Сідрі,

69

Спробуйте це, створіть роздільник у res/drawableпапці:

vertical_divider_1.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">    
    <size android:width="1dip" />
    <solid android:color="#666666" />    
</shape> 

І використовуйте dividerатрибут у LinearLayout так:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:orientation="horizontal"
    android:divider="@drawable/vertical_divider_1"
    android:dividerPadding="12dip"
    android:showDividers="middle"
    android:background="#ffffff" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

Примітка: android:divider доступний лише в Android 3.0 (рівень API 11) або вище.


але це просто додасть один дільник .. припустимо, у мене є близько 10 елементів, додавання додаткового коду для дільника між кожним елементом здається марним
Ahmed-Anas

@ death_relic0 Чому б вам не створити окремий макет для роздільника, а потім використовувати тег include, щоб додати його де завгодно і скільки завгодно довго. Я думаю, що це було б мені краще більше і без втрат.
GrIsHu

39

Додати роздільник до макету легко, нам не потрібен окремий вигляд.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:divider="?android:listDivider"
    android:dividerPadding="2.5dp"
    android:orientation="horizontal"
    android:showDividers="middle"
    android:weightSum="2" ></LinearLayout>

Над кодом зробіть вертикальний дільник для LinearLayout


Я завжди забуваю атрибут showDividers. Дякую!
Unknownweirdo

1
Дякуємо за підказку щодо використання? Android: listDivider. Я щойно помітив, що це невидимо в API 21 або вище. У нижчих версіях API відображається невелика сіра лінія
user114676

@KetanMehta ми визначимо його з атрибутом `` android: роздільник '', він може малюватися або кольором.
khaintt

Чи підтримує Android: дільник API 15 +?
RoCk RoCk

17

Оновлення: попередньо стільниковий з використанням AppCompat

Якщо ви використовуєте бібліотеку AppCompat v7, ви можете скористатися LinearLayoutCompatподанням. Використовуючи цей підхід, ви можете використовувати роздільники, які можна малювати на Android 2.1, 2.2 та 2.3.

Приклад коду:

<android.support.v7.widget.LinearLayoutCompat
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:showDividers="middle"
        app:divider="@drawable/divider">

drawable / spliter.xml: (розділювач з деякими відступами зверху та знизу)

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetBottom="2dp"
        android:insetTop="2dp">
    <shape>
        <size android:width="1dp" />
        <solid android:color="#FFCCCCCC" />
    </shape>
</inset>

Дуже важливе зауваження:LinearLayoutCompat вид не поширюється , LinearLayoutі для цього ви не повинні використовувати android:showDividersабо android:dividerвластивості , але призначені для користувача з них: app:showDividersа app:divider. У коді ви також повинні використовувати LinearLayoutCompat.LayoutParamsне the LinearLayout.LayoutParams!


Це єдиний спосіб додати вертикальний відступ до перегородки?
SARose

1
@ SARose ні, ви завжди можете створити власний вигляд або зламати існуючі компоненти перегляду. Однак це стандартний і бажаний спосіб зробити це.
Рольф ツ

8

Я просто зіткнувся з тією ж проблемою сьогодні. Як вказують попередні відповіді, проблема виникає внаслідок використання кольору в мітці розділювача, а не того, що можна малювати. Однак замість того, щоб писати власний xml-файл, який я малюю, я вважаю за краще використовувати тематичні атрибути якомога більше. Ви можете використовувати android: attr / divideerHorizontal та android: attr / spliterVertical, щоб отримати натомість заздалегідь визначений малюнок:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:showDividers="middle"
    android:divider="?android:attr/dividerVertical"
    android:orientation="horizontal">
    <!-- other views -->
</LinearLayout>

Атрибути доступні в API 11 і вище.

Крім того, як згадував bocekm у своїй відповіді, властивість divideerPadding НЕ додає додаткових відступів з обох боків вертикального роздільника, як можна було б припустити. Натомість він визначає верхнє та нижнє заповнення і, отже, може скоротити дільник, якщо він занадто великий.


6

Ви можете використовувати вбудований роздільник, це буде працювати для обох напрямків.

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:divider="?android:attr/listDivider"
  android:orientation="horizontal"
  android:showDividers="middle">

3

Невтішно, у вашій діяльності потрібно включити показ розділювачів від коду. Наприклад:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set the view to your layout
    setContentView(R.layout.yourlayout);

    // Find the LinearLayout within and enable the divider
    ((LinearLayout)v.findViewById(R.id.llTopBar)).
        setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);

}

Хоча це інший спосіб зробити це, немає потреби.
Рікардо А.

2

Ваш дільник може не відображатися через занадто великий делитель. Ви встановлюєте 22dip, це означає, що дільник усічений на 22dip зверху та 22dip знизу. Якщо висота вашого макета менше або дорівнює 44dip, тоді не буде видно дільника.


1

Якщо відповідь Kapil Vats не працює, спробуйте щось подібне:

drawable / divideer_horizontal_green_22.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <size android:width="22dip"/>
    <solid android:color="#00ff00"/>

</shape>

layout / your_layout.xml

LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/llTopBar"
            android:orientation="horizontal"
            android:divider="@drawable/divider_horizontal_green_22"
            android:showDividers="middle"
           >

Я зіткнувся з проблемою, коли атрибут padding не працював, тому мені довелося встановити висоту дільника безпосередньо в дільнику.

Примітка:

Якщо ви хочете використовувати його у вертикальному LinearLayout, створіть новий, наприклад: drawable / divideer_vertical_green_22.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <size android:height="22dip"/>
    <solid android:color="#00ff00"/>

</shape>

0

Для того, щоб намалювати, роздільник LinearLayoutповинен мати певну висоту, хоча ColorDrawable(що, по суті, #00ff00як і будь-який інший твердокодований колір), не має. Простий (і правильний) спосіб вирішити цю проблему - це обернути свій колір у якийсь Drawableіз заздалегідь визначеною висотою, такий як shapeмалювальний


-1

Вам потрібно створити будь-який вигляд для роздільника, наприклад, текстовий або зображення, а потім встановити фон для цього, якщо у вас є зображення, використовуйте колір як фон.

Сподіваюся, це вам допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.