水平線形レイアウトに仕切りを追加しようとしていますが、どこにも行きません。仕切りは表示されません。私は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>
これを水平分割器に使用します
<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
アイテム。
これを試して、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)以上でのみ使用可能です。
レイアウトに仕切りを追加するのは簡単です。別のビューは必要ありません。
<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
の垂直分割線を作成します
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
も使用する必要があります。
今日、同じ問題にぶつかりました。前の回答が示すように、問題は、ドロワブルではなく、dividerタグの色の使用に起因します。ただし、独自の描画可能なxmlを記述する代わりに、テーマ属性を可能な限り使用することを好みます。代わりに、Android:attr/dividerHorizontalおよび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">
苛立たしいことに、アクティビティのコードから仕切りを表示できるようにする必要があります。例えば:
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);
}
DividerPaddingが大きすぎるため、仕切りが表示されない場合があります。 22dipを設定します。つまり、仕切りは上から22dip、下から22dipずつ切り捨てられます。レイアウトの高さが44dip以下の場合、仕切りは表示されません。
Kapil Vats の答えが機能しない場合は、次のようなものを試してください。
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>
描画するには、LinearLayout
のディバイダーにある程度の高さが必要ですが、ColorDrawable
(基本的に#00ff00
およびその他のハードコードされた色)には高さがありません。これを解決する簡単な(そして正しい)方法は、色をDrawable
drawableなどの定義済みの高さのshape
にラップすることです。
Textviewやimageviewのようなseparator用の任意のビューを作成し、それ以外の画像がある場合はその背景を設定する必要があります。他の色は背景として使用します。
これがお役に立てば幸いです。