Как добавить (вертикальный) делитель к горизонтальному 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 ответов
используйте это для горизонтального делителя
<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>
важное замечание: на 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>
макет/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>