Как добавить (вертикальный) разделитель в горизонтальный 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> 

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

 <View android:layout_width="1dp" android:layout_height="match_parent" android:background="@color/honeycombish_blue" /> 1 <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" /> 1 <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 .

Попробуйте это, создайте разделитель в папке 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) или выше.

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

 <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

Если вы используете библиотеку V7 AppCompat, вы можете использовать представление 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 / divider.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 не LinearLayout.LayoutParams !

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

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

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

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

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

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

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

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

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

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

рисуем / divider_horizontal_green_22.xml

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

макет / 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> 
Intereting Posts
Как называется маленький виджет с тремя точками внутри карты в андроиде? Исключить автоматически сгенерированные папки в Android «Навигация по файлу» Android Market, причина отмены заказа – вы отменили этот заказ GetOpenSourceSoftwareLicenseInfo возвращает null сейчас Разрешения для WearableListenerService Каков оптимальный способ анимации вытягиваемого в представлении с использованием классов аниматора? Линейная компоновка в scrollview не занимает полную высоту Таблица символов не загружается. Используйте команду «файл». С затмением и NDK Добавление пользовательского ввода из «Редактировать текст в список» Создайте курсор для указания массива Заменить первое появление символа в Android / Java? Установить собственный шрифт для текста в PreferenceScreen Android. Возможно ли создать пользовательскую библиотеку для использования в нескольких приложениях? Android Drawer Layout не может найти R.layout.drawer_list Java.net.SocketException: семейство адресов не поддерживается протоколом в эмуляторе android