Я пытаюсь добавить разделитель в горизонтальный линейный макет, но ничего не добился. Разделитель просто не отображается. Я новичок в 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
android-layout
android-linearlayout
divider
Ахмед-Анас
источник
источник
Ответы:
используйте это для горизонтального разделителя
<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
пункте.источник
layout_width
иlayout_height
значения перепутаны: для горизонтальногоlayout_width
должны быть"fill_parent"
иlayout_height
должно быть"1dp"
. Аналогичным образом следует поменять местами вертикальный разделитель.Попробуйте так, создайте разделитель в
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
Если вы используете библиотеку 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 / diverr.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
notLinearLayout.LayoutParams
!источник
Я столкнулся с той же проблемой сегодня. Как показывают предыдущие ответы, проблема связана с использованием цвета в теге разделителя, а не с возможностью рисования. Однако вместо того, чтобы писать свой собственный XML-код с возможностью рисования, я предпочитаю как можно больше использовать тематические атрибуты. Вы можете использовать android: 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 НЕ добавляет дополнительных отступов по обе стороны от вертикального разделителя, как можно было бы предположить. Вместо этого он определяет верхнее и нижнее отступы и, таким образом, может обрезать разделитель, если он слишком велик.
источник
Вы можете использовать встроенный разделитель, он будет работать для обеих ориентаций.
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:divider="?android:attr/listDivider" android:orientation="horizontal" android:showDividers="middle">
источник
К сожалению, вы должны включить отображение разделителей кода в своей деятельности. Например:
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); }
источник
Ваш разделитель может не отображаться из-за слишком большого размера dividerPadding. Вы устанавливаете 22dip, это означает, что разделитель усекается на 22dip сверху и на 22dip снизу. Если высота вашего макета меньше или равна 44dip, разделитель не отображается.
источник
Если ответ Kapil Vats не работает, попробуйте что-то вроде этого:
drawable / divider_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" >
Я столкнулся с проблемой, когда атрибут заполнения не работал, поэтому мне пришлось установить высоту разделителя непосредственно в разделителе.
Заметка:
Если вы хотите использовать его в вертикальном 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>
источник
Чтобы его можно было нарисовать, разделитель
LinearLayout
должен иметь некоторую высоту, в то время какColorDrawable
(которая, по сути,#00ff00
так же, как и любой другой жестко заданный цвет) не имеет. Простой (и правильный) способ решить эту проблему - обернуть ваш цвет в некоторыеDrawable
с заранее определенной высотой, например, с возможностьюshape
рисования.источник
Вы должны создать любое представление для разделителя, такого как textview или imageview, затем установить для него фон, если у вас есть изображение, иначе используйте цвет в качестве фона.
Надеюсь, это тебе поможет.
источник