Próbuję dodać separator do poziomego układu liniowego, ale nic nie robię. Separator po prostu się nie pokazuje. Jestem zupełnym nowicjuszem z Androidem.
To jest mój XML układu:
<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
Ahmed-Anas
źródło
źródło
Odpowiedzi:
użyj tego do rozdzielacza poziomego
<View android:layout_width="1dp" android:layout_height="match_parent" android:background="@color/honeycombish_blue" />
i to dla przegrody pionowej
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/honeycombish_blue" />
LUB, jeśli możesz użyć separatora LinearLayout, do podziału poziomego
<?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>
i w 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" >
Jeśli chcesz
android:height="1dp"
użyć pionowej przegrody, użyj zamiast kształtuandroid:width="1dp"
Wskazówka: nie zapomnij o
android:showDividers
elemencie.źródło
layout_width
ilayout_height
wartości: horyzontalnielayout_width
powinno być"fill_parent"
ilayout_height
powinno być"1dp"
. Powinien być zamieniony podobnie w przypadku przegrody pionowej.Spróbuj tego, utwórz separator w
res/drawable
folderze: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>
I użyj
divider
atrybutu w LinearLayout w ten sposób:<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>
Uwaga:
android:divider
jest dostępny tylko w systemie Android 3.0 (poziom API 11) lub nowszym.źródło
Łatwo jest dodać separator do układu, nie potrzebujemy osobnego widoku.
<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>
Powyższy kod tworzy pionową separator dla
LinearLayout
źródło
Aktualizacja: pre-Honeycomb przy użyciu AppCompat
Jeśli używasz biblioteki AppCompat v7, możesz chcieć użyć
LinearLayoutCompat
widoku. Korzystając z tego podejścia, możesz użyć rysowalnych separatorów w systemie Android 2.1, 2.2 i 2.3.Przykładowy kod:
<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: ( separator z dopełnieniem na górze i na dole)
<?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>
Bardzo ważna uwaga:
LinearLayoutCompat
widok nie rozciągaLinearLayout
i do nich nie należy używaćandroid:showDividers
aniandroid:divider
właściwości ale te niestandardowe:app:showDividers
aapp:divider
. W kodzie należy również użyćLinearLayoutCompat.LayoutParams
notLinearLayout.LayoutParams
!źródło
Właśnie dzisiaj napotkałem ten sam problem. Jak wskazują poprzednie odpowiedzi, problem wynika z zastosowania koloru w tagu rozdzielacza, a nie z elementu rysunkowego. Jednak zamiast pisać własny plik XML do rysowania, wolę używać atrybutów tematycznych tak często, jak to możliwe. Możesz użyć android: attr / dividerHorizontal i android: attr / dividerVertical, aby zamiast tego uzyskać predefiniowany element do rysowania:
<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>
Atrybuty są dostępne w API 11 i nowszych.
Ponadto, jak wspomniał bocekm w swojej odpowiedzi, właściwość dividerPadding NIE dodaje dodatkowego wypełnienia po obu stronach pionowego separatora, jak można by przypuszczać. Zamiast tego definiuje dopełnienie górne i dolne, co może spowodować obcięcie rozdzielacza, jeśli jest zbyt duży.
źródło
Możesz użyć wbudowanego rozdzielacza, będzie to działać dla obu orientacji.
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:divider="?android:attr/listDivider" android:orientation="horizontal" android:showDividers="middle">
źródło
Frustrujące jest to, że musisz włączyć wyświetlanie separatorów od kodu w swojej aktywności. Na przykład:
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); }
źródło
Twój element dzielący może nie być wyświetlany z powodu zbyt dużego podziału. Ustawiasz 22dip, co oznacza, że dzielnik jest obcięty o 22dip od góry i 22dip od dołu. Jeśli wysokość układu jest mniejsza lub równa 44 dip, wówczas nie jest widoczny żaden element rozdzielający.
źródło
Jeśli odpowiedź Kapil Vats nie działa, spróbuj czegoś takiego:
do rysowania / dzielnik_poziome_zielony_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>
układ / 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" >
Napotkałem problem polegający na tym, że atrybut wypełnienia nie działał, dlatego musiałem ustawić wysokość separatora bezpośrednio w separatorze.
Uwaga:
Jeśli chcesz go użyć w pionowym LinearLayout, utwórz nowy, na przykład: 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>
źródło
Aby zostać narysowanym, dzielnik
LinearLayout
musi mieć pewną wysokość, podczas gdyColorDrawable
(która jest zasadniczo#00ff00
tak samo dobra, jak każdy inny zakodowany kolor) nie ma. Prostym (i poprawnym) sposobem rozwiązania tego problemu jest zawinięcie koloru w niektóreDrawable
z predefiniowaną wysokością, na przykład doshape
rysowaniaźródło
Musisz utworzyć dowolny widok dla separatora, taki jak widok tekstu lub widok obrazu, a następnie ustawić tło dla tego, jeśli masz obraz, w innym przypadku użyj koloru jako tła.
Mam nadzieję, że to ci pomoże.
źródło