Как добавить (вертикальный) разделитель в горизонтальный 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>
Ответы
Ответ 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" />
ИЛИ, если вы можете использовать разделитель 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
.
Ответ 2
Попробуйте это, создайте разделитель в папке 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) или выше.
Ответ 3
Легко добавить разделитель в макет, нам не нужно отдельное представление.
<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
Ответ 4
Обновление: 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
!
Ответ 5
Сегодня я столкнулся с одной и той же проблемой. Как показывают предыдущие ответы, проблема связана с использованием цвета в теге делителя, а не с возможностью рисования. Однако вместо того, чтобы писать свой собственный 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 НЕ добавляет дополнительное дополнение по обе стороны от вертикального делителя, как можно было бы предположить. Вместо этого он определяет верхнее и нижнее заполнение и, следовательно, может обрезать делитель, если он слишком большой.
Ответ 6
Вы можете использовать встроенный делитель, это будет работать для обеих ориентаций.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?android:attr/listDivider"
android:orientation="horizontal"
android:showDividers="middle">
Ответ 7
Разочарочно, вам нужно включить отображение разделителей из кода в вашей деятельности. Например:
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);
}
Ответ 8
Ваш разделитель может не отображаться из-за слишком большого разделителя. Вы устанавливаете 22dip, это означает, что разделитель усечен 22dip сверху и 22dip снизу. Если высота вашего макета меньше или равна 44dip, то не отображается разделитель.
Ответ 9
Чтобы получить обратный, разделитель LinearLayout
должен иметь некоторую высоту, а ColorDrawable
(который по существу #00ff00
, а также любой другой жесткий код) не имеет. Простой (и правильный) способ решить эту проблему состоит в том, чтобы обернуть ваш цвет в некоторый Drawable
с предопределенной высотой, например shape
drawable
Ответ 10
Вы можете использовать IcsLinearLayout, как это используется в библиотеке ActionBarSherlock, или использовать обычный API, который доступен на ICS (или скопировать его код).
EDIT: вы также можете использовать LinearLayoutICS, который используется в библиотеке поддержки. Я сделал сообщение об этом здесь.
Вы можете использовать тот же метод для создания drawable, как показано здесь, или создать 9-патч.
Ответ 11
Если ответ 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, создайте новый, например:
вытяжке /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>
Ответ 12
Вам нужно создать любое представление для разделителя, например textview или imageview, а затем установить для него фон, если у вас есть изображение, которое использует цвет в качестве фона.
Надеюсь, это поможет вам.