web-dev-qa-db-ja.com

(垂直)仕切りを水平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>
84
Ahmed-Anas

これを水平分割器に使用します

<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アイテム。

199
Kapil Vats

これを試して、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> 

そして、LinearLayoutでdivider属性を次のように使用します。

<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)以上でのみ使用可能です。

65
Shreesha S

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

<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の垂直分割線を作成します

34
khaintt

更新: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/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:showDividersおよびapp:dividerを使用する必要があります。コードでは、LinearLayoutCompat.LayoutParamsではなくLinearLayout.LayoutParamsも使用する必要があります。

15
Rolf ツ

今日、同じ問題にぶつかりました。前の回答が示すように、問題は、ドロワブルではなく、dividerタグの色の使用に起因します。ただし、独自の描画可能な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プロパティは、垂直デバイダーの両側に余分なパディングを追加しません。代わりに、上部と下部のパディングを定義するため、大きすぎる場合は分割線を切り捨てることがあります。

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

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

苛立たしいことに、アクティビティのコードから仕切りを表示できるようにする必要があります。例えば:

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

}
3
dougc

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

2
bocekm

Kapil Vats の答えが機能しない場合は、次のようなものを試してください。

drawable/divider_horizo​​ntal_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>
0
Ionut Negru

描画するには、LinearLayoutのディバイダーにある程度の高さが必要ですが、ColorDrawable(基本的に#00ff00およびその他のハードコードされた色)には高さがありません。これを解決する簡単な(そして正しい)方法は、色をDrawable drawableなどの定義済みの高さのshapeにラップすることです。

0
Dmitry Zaytsev

ActionBarSherlockライブラリで使用されているIcsLinearLayoutを使用するか、ICSで使用可能な通常のAPIを使用できます(またはそのコードをコピーします)。

編集:サポートライブラリで使用されているLinearLayoutICSを使用することもできます。私はそれについて投稿しました here .

here のように同じテクニックを使用してドロアブルを作成するか、9パッチのドロアブルを作成できます。

0

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

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

0
itsrajesh4uguys