如何添加(垂直)分隔线到水平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> 

使用这个水平分隔符

 <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文件夹中创build一个divider:

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创build垂直分隔符

更新:使用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

我今天刚碰到同样的问题 正如前面的答案所指出的那样,问题源于在分隔标签中使用颜色,而不是可绘制的。 但是,我并不是写自己的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属性不会在垂直分隔符的任何一边添加额外的填充,正如人们可以假设的那样。 相反,它定义了顶部和底部填充,因此可能会截断分隔符,如果它太大。

令人沮丧的是,你必须启用你的活动中的代码来显示分隔符。 例如:

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

你可以使用内置的分频器,这将适用于两个方向。

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

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

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

希望这可以帮助你。

为了绘制, LinearLayout分隔线必须有一些高度,而ColorDrawable (本质上#00ff00以及任何其他硬编码的颜色)没有。 简单(正确)的方法来解决这个问题,就是把你的颜色包装成一些Drawable高度,比如可绘制的shape

您可以使用ActionBarSherlock库上使用的IcsLinearLayout,或使用ICS上提供的常规API(或复制其代码)。

编辑:你也可以使用支持库上使用的LinearLayoutICS。 我已经在这里发表了一篇文章。

您可以使用相同的技巧创build如下所示的drawable,或创build一个9-patch drawable。

如果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属性不工作的问题,因此我必须直接在divider中设置divider的高度。

注意:

如果您想在垂直LinearLayout中使用它,请创build一个新的,如下所示: 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>