水平のLinearLayoutに(垂直の)ディバイダーを追加する方法は?


92

水平線形レイアウトに仕切りを追加しようとしていますが、どこにも表示されません。仕切りは表示されません。私は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>

これを実行しているAndroidのバージョンは何ですか?setDividerDrawableは、APIのみ11から存在しています
アレックス

ジェリービーン4.2 API 17
アーメド・アナス2013

他のすべてを試した場合は、LinearLayoutの向きが正しいことを確認してください。水平方向に分割線の高さを設定すると、非常に混乱します。
Nino van Hooff、2016

1
腹立たしいSHOWDIVIDERSアイテムを忘れないでください!!!!!!
Fattie 2016

回答:


217

水平仕切りに使用します

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

ヒント:忘れてはいけないandroid:showDividers項目を。


3
ありがとう。しかし、これを「android:divider」属性にどのように追加しますか?基本的に、つまり、各要素の間にディバイダーを自動的に追加する何らかの方法ですか?なぜandroid:divider属性があるのか​​ということではありませんか?
Ahmed-Anas 2013

@ death_relic0 android:dividerは、ListView、Expandable Listview、TabWidgetに対応しています
Padma Kumar

9
おかげで、なぜそれがここにあるそして:S developer.android.com/reference/android/widget/...
アハメド・アナス

色ではなくドローアブルを使用する必要があるようです
demaksee 2013

7
あなたが得たようだlayout_widthlayout_heightの値が混ざっ:水平にするためにlayout_widthあるべき"fill_parent"layout_heightする必要があります"1dp"。垂直方向の仕切りと同様に交換する必要があります。
Jay Sidri、2014年

68

これを試して、res/drawableフォルダーに仕切りを作成します。

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)以降でのみ使用できます。


しかし、それは1つのディバイダーを追加するだけです。10個の要素があるとします。各エレメント間にディバイダーのコードを追加すると無駄に見えます
Ahmed-Anas

@ death_relic0ディバイダー用に個別のレイアウトを作成してから、includeタグを使用して、必要な場所に何回でも追加できます。私はこれがもっと良くなり、無駄がなくなると思います。
GrIsHu 2013

39

レイアウトに仕切りを追加するのは簡単です。別のビューは必要ありません。

<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


私はいつもshowDividers属性を忘れています。ありがとうございました!
Unknownweirdo 2015年

1
?android:listDividerを使用するためのヒントをありがとう。これはAPI 21以降では表示されないことに気づきました。低いAPIバージョンでは、小さな灰色の線が表示されます
user114676

@KetanMehta私たちはそれを属性「android:divider」で定義します、それはドローアブルまたはカラーです。
khaintt

android:dividerはAPI 15以降をサポートしていますか?
RoCk RoCk 16

16

更新:AppCompatを使用したpre-Honeycomb

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 / divider.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:showDividersapp:divider。コードでは、LinearLayoutCompat.LayoutParamsnot LinearLayout.LayoutParams


これはディバイダーに垂直パディングを追加する唯一の方法ですか?
SARose

1
@SARoseいいえ、いつでもカスタムビューを作成したり、既存のビューコンポーネントにハッキングしたりできます。ただし、これはデフォルトであり、推奨される方法です。
ロルフツメイ

8

今日も同じ問題に遭遇しました。以前の回答が示すように、問題はドローアブルではなく、ディバイダータグで色を使用することに起因します。ただし、独自のドローアブルxmlを作成するのではなく、可能な限りテーマ属性を使用することを好みます。代わりにandroid:attr / dividerHorizo​​ntalおよびandroid:attr / dividerVerticalを使用して、事前定義されたドローアブルを取得できます。

<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プロパティは、垂直方向の仕切りの両側に余計な余白を追加しません。代わりに、上部と下部のパディングを定義するため、大きすぎる場合はディバイダーが切り捨てられる可能性があります。


6

組み込みの仕切りを使用できます。これは両方の向きで機能します。

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

3

イライラして、あなたはあなたの活動のコードからの仕切りを示すことを可能にしなければなりません。例えば:

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

}

これは別の方法ですが、必要はありません。
Ricardo A.

2

仕切りが大きすぎるため、仕切りが表示されていない可能性があります。22dipを設定すると、分割線が上から22dip、下から22dip切り捨てられます。レイアウトの高さが44dip以下の場合、仕切りは表示されません。


1

Kapil Vatsの答えがが機能しない次のようなことを試してください。

drawable / divider_horizo​​ntal_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"
           >

padding属性が機能しない問題が発生したため、仕切りの高さを仕切りに直接設定する必要がありました。

注意:

垂直方向の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>

0

描画されるためにはLinearLayoutColorDrawable(実質的に#00ff00他のハードコードされたカラーと同様に)のディバイダーにはある程度の高さが必要です。これを解決する簡単な(そして正しい)方法はDrawableshapeドローアブルなどの事前定義された高さで色をいくつかにラップすることです


-1

textviewやimageviewのようなセパレーターのビューを作成し、画像がある場合はその背景を設定する必要があります。それ以外の場合は、背景として色を使用します。

これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.