如何在水平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之后才存在
Alex

果冻豆4.2 API 17
艾哈迈德·阿纳斯

如果您尝试了其他所有方法,请确保LinearLayout的方向正确。为水平方向的分隔线设置高度会非常混乱。
尼诺·范·霍夫

1
不要忘记令人讨厌的SHOWDIVIDERS项目!!!!!!
Fattie

Answers:


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属性在那里?
艾哈迈德·阿纳斯

@ death_relic0 android:divider适用于ListView,Expandable Listview和TabWidget
Padma Kumar

9
感谢,但为什么它这里,那么:■ developer.android.com/reference/android/widget/...
艾哈迈德-阿纳斯

看来您应该使用任何可绘制的颜色,而不是颜色
demaksee 2013年

7
似乎您混淆了自己的价值观layout_widthlayout_height价值观:水平layout_width应该是"fill_parent"并且layout_height应该是"1dp"。应该类似地换成垂直分隔线。
杰伊·西德里

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> 

并使用dividerLinearLayout中的属性,如下所示:

<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)或更高版本中可用。


但这只会增加一个分隔符。.假设我有10个元素,则在每个元素之间添加一个分隔符的附加代码似乎是一种浪费
Ahmed-Anas 2013年

@ death_relic0为什么不为分隔符创建单独的布局,然后使用include标签将其添加到所需的任意位置和任意次数。我认为这将使我更好,而且不会浪费。
GrIsHu

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之前的蜂窝

如果您使用的是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.LayoutParamsnot LinearLayout.LayoutParams


这是向分隔线添加垂直填充的唯一方法吗?
SARose

1
@SARose否,您始终可以创建自定义视图或破解现有视图组件。但是,这是默认的首选方法。
罗尔夫(Rolf)

8

我今天遇到了同样的问题。正如前面的答案所表明的那样,问题出在分隔符标签中使用的是颜色,而不是可绘制的。但是,我宁愿使用尽可能多的主题属性,而不是编写自己的drawable 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);

}

尽管这是另一种方式,但没有必要。
里卡多

2

您的分隔线可能由于dividerPadding太大而无法显示。设置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>

布局/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

为了绘制,的分隔线LinearLayout必须具有一定的高度,而高度ColorDrawable(基本上#00ff00与其他硬编码的颜色一样)没有。解决此问题的简单(正确)方法是将颜色包装到Drawable具有预定义高度的颜色中,例如shape可绘制


-1

您必须为分隔符(例如textview或imageview)创建任何视图,然后为该视图设置背景(如果有图像),否则请使用颜色作为背景。

希望对您有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.