Yatay bir LinearLayout'a (dikey) bölücü nasıl eklenir?


95

Yatay doğrusal düzene bir bölücü eklemeye çalışıyorum ama hiçbir yere varamıyorum. Bölücü sadece görünmüyor. Android ile tamamen acemiyim.

Bu benim düzen XML'im:

<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>

Bunu hangi Android sürümünde çalıştırıyorsunuz? setDividerDrawable yalnızca API 11
alex

jelly bean 4.2 api 17
Ahmed-Anas

Her şeyi denediyseniz, LinearLayout'un doğru yönlendirmeye sahip olduğundan emin olun. Yatay yönelimli bir bölücü için yükseklik ayarlamak çok kafa karıştırıcı olacaktır.
Nino van Hooff

1
çileden çıkaran SHOWDIVIDERS öğesini unutmayın !!!!!!
Şişko

Yanıtlar:


223

bunu yatay ayırıcı için kullanın

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="@color/honeycombish_blue" />

ve bu dikey bölücü için

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/honeycombish_blue" />

VEYA LinearLayout bölücüyü yatay ayırıcı için kullanabiliyorsanız

<?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>

ve LinearLayout'ta

<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" >

Dikey bölücüyü android:height="1dp"kullanmak istiyorsanız , şekil yerine kullanınandroid:width="1dp"

İpucu: Do unutmaandroid:showDividers öğeyi.


3
Teşekkürler. ancak bunu "android: divider" özelliğine nasıl ekleyeceğim? Temel olarak, demek istediğim, bölücüleri her bir öğe arasına eklemenin bir tür otomatik yolu? Demek istediğim, android: divider özelliği neden orada değil mi?
Ahmed-Anas

@ death_relic0 android: bölücü ListView, Genişletilebilir Listview ve TabWidget için Avil olduğunu
Padma Kumar

9
teşekkürler, ama o zaman neden burada: s developer.android.com/reference/android/widget/…
Ahmed-Anas

Görünüşe göre renk değil, herhangi bir çekilebilir ürün kullanmalısınız
demaksee

7
Görünüşe göre, değerlerinizi layout_widthve layout_heightdeğerlerinizi karıştırmışsınız: çünkü yatay layout_widtholmalı "fill_parent"ve layout_heightolmalı "1dp". Dikey bölücü için benzer şekilde değiştirilmelidir.
Jay Sidri

69

Bunu deneyin, res/drawableklasörde bir ayırıcı oluşturun :

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> 

Ve dividerLinearLayout'taki özniteliği şu şekilde kullanın:

<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>

Not: android:divider Yalnızca Android 3.0 (API seviyesi 11) veya üzeri sürümlerde mevcuttur.


ama bu sadece bir bölücü ekleyecektir .. farz edelim ki 10 elemanım var, her eleman arasına bir bölücü için ek kod eklemek israf gibi görünüyor
Ahmed-Anas

@ death_relic0 Neden bölücü için ayrı bir düzen oluşturmuyorsunuz ve sonra bunu istediğiniz yere ve istediğiniz kadar eklemek için include etiketini kullanmıyorsunuz? Sanırım bu benim daha iyi olur ve israf olmaz
GrIsHu

40

Düzene bölücü eklemek kolaydır, ayrı bir görünüme ihtiyacımız yoktur.

<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>

Yukarıdaki kod, için dikey bölücü yapar LinearLayout


ShowDividers özelliğini her zaman unuturum. Teşekkür ederim!
Unknownweirdo

1
Kullanım ipucu için teşekkürler? Android: listDivider. API 21 veya üzeri sürümlerde görünmez olduğunu fark ettim. Daha düşük API sürümlerinde küçük bir gri çizgi gösterilir
user114676

@KetanMehta bunu 'android: divider' niteliği ile tanımlayacağız, çekilebilir veya renkli.
Khai Nguyen

Android: divider, API 15 + 'yı destekliyor mu?
RoCk RoCk

17

Güncelleme: AppCompat kullanarak Honeycomb öncesi

AppCompat kitaplığı v7 kullanıyorsanız, LinearLayoutCompatgörünümü kullanmak isteyebilirsiniz . Bu yaklaşımı kullanarak Android 2.1, 2.2 ve 2.3'te çekilebilir bölücüler kullanabilirsiniz.

Örnek 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: (üstte ve altta biraz dolgu bulunan bölücü)

<?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>

Çok önemli not:LinearLayoutCompat görünüm uzatmaz LinearLayoutve kullanmak gerekir bunun android:showDividersya android:dividerözelliklerini ancak özel olanları: app:showDividersve app:divider. Kodda ayrıca LinearLayoutCompat.LayoutParamsdeğil LinearLayout.LayoutParams!


Bölücüye dikey dolgu eklemenin tek yolu bu mu?
SARose

1
@SARo no, her zaman özel bir görünüm oluşturabilir veya mevcut görünüm bileşenlerini hackleyebilirsiniz. Ancak bu, bunu yapmak için varsayılan ve tercih edilen yöntemdir.
Rolf ツ

8

Ben de bugün aynı problemle karşılaştım. Önceki yanıtların da gösterdiği gibi, sorun, çizilebilir olmaktan ziyade ayırıcı etiketinde bir renk kullanımından kaynaklanmaktadır. Ancak, kendi çizilebilir xml'imi yazmak yerine, mümkün olduğunca temalı nitelikleri kullanmayı tercih ediyorum. Bunun yerine önceden tanımlanmış bir çekilebilirlik elde etmek için android: attr / dividerHorizontal ve android: attr / dividerVertical'i kullanabilirsiniz:

<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>

Öznitelikler API 11 ve üzeri sürümlerde mevcuttur.

Ayrıca, bocekm'in cevabında belirtildiği gibi, dividerPadding özelliği, varsayılabileceği gibi, dikey bir bölücünün her iki tarafına da fazladan dolgu EKLEMEZ. Bunun yerine, üst ve alt dolguyu tanımlar ve bu nedenle, çok büyükse bölücüyü kesebilir.


6

Yerleşik bölücüyü kullanabilirsiniz, bu her iki yön için de çalışacaktır.

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:divider="?android:attr/listDivider"
  android:orientation="horizontal"
  android:showDividers="middle">

3

Sinir bozucu bir şekilde, bölücüleri etkinliğinizde koddan göstermeyi etkinleştirmeniz gerekir. Örneğin:

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);

}

Bunu yapmanın başka bir yolu olmasına rağmen buna gerek yok.
Ricardo A.

2

Bölen çok büyük dividerPadding nedeniyle gösterilmiyor olabilir. 22dip ayarladınız, bu, bölücünün üstten 22 dip ve alttan 22 dip ile kesildiği anlamına gelir. Düzen yüksekliğiniz 44dip'den az veya buna eşitse bölücü görünmez.


1

Kapil Vats'in cevabı işe yaramıyorsa, şöyle bir şey deneyin:

drawable / divider_horizontal_green_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>

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"
           >

Dolgu niteliğinin çalışmadığı bir sorunla karşılaştım, bu nedenle bölücünün yüksekliğini doğrudan bölücüde ayarlamak zorunda kaldım.

Not:

Dikey LinearLayout'ta kullanmak istiyorsanız, şunun gibi yeni bir tane oluşturun: 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>

0

Çizilebilmesi için, bölücü bir LinearLayoutmiktar yüksekliğe sahip olmalıdır, oysa ColorDrawable(esasen #00ff00diğer herhangi bir kodlanmış renk gibi) yoktur. Bunu çözmenin basit (ve doğru) yolu, renginizi çizilebilir Drawablegibi önceden tanımlanmış bir yüksekliğe shapesarmaktır.


-1

Metin görünümü veya görüntü görünümü gibi ayırıcı için herhangi bir görünüm oluşturmanız ve ardından arka planı başka bir görüntünüz varsa arka planı olarak ayarlamanız gerekir.

Umarım bu size yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.