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