如何将(垂直)分隔符添加到水平LinearLayout?

时间:2013-02-28 06:08:16

标签: android android-layout android-linearlayout divider

我正在尝试将分隔符添加到水平线性布局但是无处可去。分频器没有显示。我是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>

11 个答案:

答案 0 :(得分:196)

将其用于水平分隔符

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

答案 1 :(得分:65)

试试这个,在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)或更高版本。

答案 2 :(得分:34)

将分隔符添加到布局很容易,我们不需要单独的视图。

<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

制作垂直分隔线

答案 3 :(得分:15)

更新:使用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:showDividersandroid:divider属性,自定义的:app:showDividersapp:divider。在代码中,您还应该使用LinearLayoutCompat.LayoutParams而不是LinearLayout.LayoutParams

答案 4 :(得分:8)

我今天遇到了同样的问题。如前面的答案所示,问题源于在分隔符标签中使用颜色,而不是可绘制的。但是,我更喜欢尽可能使用主题属性,而不是编写自己的drawable xml。您可以使用android:attr / dividerHorizo​​ntal和android:attr / dividerVertical来获取预定义的drawable:

<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属性不会在垂直分隔符的任何一侧添加额外的填充,正如人们可能认为的那样。相反,它定义了顶部和底部填充,因此如果它太大,可能会截断分隔符。

答案 5 :(得分:5)

您可以使用内置分隔符,这将适用于两个方向。

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

答案 6 :(得分: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);

}

答案 7 :(得分:2)

由于dividerPadding太大,您的分隔符可能无法显示。你设置了22dip,这意味着分隔符被顶部的22dip和底部的22dip截断。如果您的布局高度小于或等于44dip,则不会显示分隔符。

答案 8 :(得分:0)

为了绘制,LinearLayout的分隔符必须有一些高度,而ColorDrawable(基本上是#00ff00以及任何其他硬编码颜色)都没有。解决此问题的简单(和正确)方法是将您的颜色包装到具有预定义高度的某些Drawable中,例如shape drawable

答案 9 :(得分:0)

如果Kapil Vats的答案无效,请尝试以下方法:

<强>抽拉/ divider_horizo​​ntal_green_22.xml          

    <size android:width="22dip"/>
    <solid android:color="#00ff00"/>

</shape>

<强>布局/ 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中使用它,请创建一个新的,如下所示: 的抽拉/ 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>

答案 10 :(得分:-1)

你必须创建像textview或imageview这样的分隔符的任何视图,然后设置背景,如果你有图像,否则使用颜色作为背景。

希望这会对你有所帮助。