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