Как добавить (вертикальный) разделитель горизонтальный LinearLayout?


Я пытаюсь добавить разделитель к горизонтальной линейной компоновке, но ничего не получаю. Разделитель просто не показывает. Я полный новичок с 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>
12 77

12 ответов:

используйте это для горизонтального делителя

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

Совет: не забудьте the android:showDividers товар.

попробуйте это, создать разделитель в :

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) или выше.

легко добавить разделитель в макет, нам не нужен отдельный вид.

<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

обновление: pre-Honeycomb с помощью 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 / делитель.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>

важное замечание: The LinearLayoutCompat посмотреть не расширить LinearLayout и поэтому вы не должны использовать android:showDividers или android:divider свойства, но пользовательские:app:showDividers и app:divider. В коде вы также должны использовать LinearLayoutCompat.LayoutParams не LinearLayout.LayoutParams!

Я просто столкнулся с той же проблемой сегодня. Как показывают предыдущие ответы, проблема связана с использованием цвета в теге разделителя, а не с рисованием. Однако вместо того, чтобы писать свой собственный рисованный xml, я предпочитаю использовать тематические атрибуты как можно больше. Вы можете использовать android: attr / dividerHorizontal и android: attr/dividerVertical, чтобы получить предопределенный drawable вместо:

<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 в своем ответе, свойство dividerPadding не добавляет дополнительного заполнения по обе стороны от вертикального разделителя, как можно было бы предположить. Вместо этого он определяет верхнюю и нижнюю прокладку и, таким образом, может усечь разделитель, если он слишком велик.

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

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);

}

вы можете использовать встроенный делитель, это будет работать для обоих направлениях.

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

ваш разделитель может не отображаться из-за слишком большого dividerPadding. Вы устанавливаете 22dip, это означает, что делитель усекается на 22dip сверху и на 22dip снизу. Если ваша высота макета меньше или равна 44dip, то разделитель не виден.

вы должны создать любое представление для сепаратора, как textview или imageview затем установить фон для этого, если у вас есть изображение еще использовать цвет в качестве фона.

надеюсь, что это поможет вам.

для того, чтобы втянуться, делитель LinearLayout должен иметь некоторую высоту в то время как ColorDrawable (который является по существу #00ff00 как и любой другой жестко цветов) не имеет. Простой (и правильный) способ решить эту проблему, чтобы обернуть свой цвет в некоторых Drawable С предопределенной высотой, например shape drawable

вы можете использовать IcsLinearLayout, как используется в библиотеке ActionBarSherlock, или использовать обычный API, доступный на ICS (или скопировать его код).

EDIT: вы также можете использовать LinearLayoutICS, как используется в библиотеке поддержки. Я сделал сообщение об этом здесь.

вы можете использовать ту же технику для создания drawable, как показано здесь, или создать 9-патч drawable.

Если ответ Капил Чанах не работает, попробуйте что-то вроде этого:

drawable / divider_horizontal_green_22.xml

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

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

Примечание:

Если вы хотите использовать его в вертикальном LinearLayout, сделать новый, как это: drawable / divider_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>