线性布局分割线未显示

27

我正在开发一个安卓项目,其中有一个LinearLayout布局里包含两个水平方向的无边框按钮。

我想要在每个按钮之间添加分隔线,但它们没有显示出来,我不知道原因。以下是XML布局:

<LinearLayout android:id="@+id/call_log_select_host_button_group"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:divider="#ffffff"
        android:showDividers="middle"
        android:dividerPadding="22dp">
        <Button android:id="@+id/call_log_select_btnCancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Cancel"
            style="?android:attr/borderlessButtonStyle" />
        <Button android:id="@+id/call_log_select_btnBlock"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Block"
            style="?android:attr/borderlessButtonStyle" />
    </LinearLayout>

感谢您能提供任何帮助。


1
一个有点儿傻的问题,但是你的背景是什么颜色? - codeMagic
它是Theme.Holo.Dialog,这是一个深色背景。 - Boardy
3
不要忘记那个令人恼火的SHOWDIVIDERS项目!!!!!! - Fattie
3个回答

97

res/drawable文件夹内创建一个名为mydivider.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="#ffffff" />
</shape>
将该形状添加为您布局的分隔符。
<LinearLayout android:id="@+id/call_log_select_host_button_group"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:divider="@drawable/mydivider"
        android:showDividers="middle"
        android:dividerPadding="22dp">
        <Button android:id="@+id/call_log_select_btnCancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Cancel"
            style="?android:attr/borderlessButtonStyle" />
        <Button android:id="@+id/call_log_select_btnBlock"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Block"
            style="?android:attr/borderlessButtonStyle" />
    </LinearLayout>

或者作为解决方法:

<LinearLayout android:id="@+id/call_log_select_host_button_group"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:divider="@drawable/mydivider"
        android:showDividers="middle"
        android:dividerPadding="22dp">
        <Button android:id="@+id/call_log_select_btnCancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Cancel"
            style="?android:attr/borderlessButtonStyle" />

         <View    android:layout_width="1dp"
            android:layout_height="wrap_content"
            android:background="#ffffff" />

        <Button android:id="@+id/call_log_select_btnBlock"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Block"
            style="?android:attr/borderlessButtonStyle" />
    </LinearLayout>

1
这在Android 2.2上不起作用。 - Basavaraj Hampali
@BasavarajHampali 但是你可以在支持库中使用LinearLayoutICS,就像这里展示的那样:http://stackoverflow.com/questions/22547897/how-to-add-dividers-to-linearlayoutics/ - android developer
5
我的应用以最低API 11为目标,但在针对Android 4.4.2时无法正常工作。 - ericn
@legr3c:不要进行无意义的编辑。 - Engineer2021
6
不必编写自己的mydivider.xml文件,您也可以从当前主题中引用一个,即android:divider="?android:attr/dividerHorizontal"或android:divider="?android:attr/dividerVertical" - 适用于API 11及以上版本。 - Nicolai Buch-Andersen
@NicolaiBuch-Andersen的答案应该是最好的。它适用于Android 4.4.3(我没有测试其他版本)。 - John Pang

10

尝试将android:divider="#ffffff"替换为android:divider="@android:color/white"。我猜测divider必须是一个Drawable,硬编码的颜色可能不会像Drawable一样处理它,但引用它可能会。


1
你说得对。从颜色切换到可绘制对象,完美!接受的答案有很好的示例。 - mente

0
你应该在你的LinearLayout中添加android:layout_width="fill_parent"android:layout_height="fill_parent"。这样它就会显示出来;)

这样做会破坏布局,因为按钮组上面的内容只显示在活动顶部的按钮,分隔线仍然没有显示。 - Boardy
在你的LinearLayout中添加android:weightSum="",这样能解决你的问题吗? - Wannabe
我已经尝试按照https://dev59.com/kms05IYBdhLWcg3wFOG8中所述将weightSum设置为2,但它仍然显示按钮组在顶部,上面应该显示的内容没有显示出来,分隔线也没有显示。 - Boardy
style="?android:attr/borderlessButtonStyle" 只在 Android 4.0 中实现,如果我没记错的话。你是否将其设置为 Android 4.0+?编辑:它是在 API 级别 11 中实现的。 - Wannabe
我正在针对Jelly Bean进行开发,按钮无边框属性按预期工作,只是分隔线没有。 - Boardy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接