Android在视图之间绘制一条水平线


105

我的“我的布局”如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<TextView
        android:id="@+id/textView1"
        style="@style/behindMenuItemLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Twitter Feeds"
        android:textStyle="bold" />

    <ListView
        android:id="@+id/list"
        android:layout_width="350dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/textView1"
        style="@style/behindMenuItemLabel1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="1dp"
        android:text="FaceBook Feeds" />

    <ListView
        android:id="@+id/list1"
        android:layout_width="350dp"
        android:layout_height="50dp" />

</LinearLayout>

我的要求是在和之间绘制一条水平线TextViewListView

有人可以帮忙吗?


您可以将行添加到现有视图的背景,而不添加多余的行。或者,您可以将所有视图放入listView中。listView可以绘制分隔符。最简单的方法是添加额外的视图。
Leonidos

Answers:


285

它将在TextView&之间绘制银灰色的线ListView

<TextView
    android:id="@+id/textView1"
    style="@style/behindMenuItemLabel1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="1dp"
    android:text="FaceBook Feeds" />

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#c0c0c0"/>

<ListView
    android:id="@+id/list1"
    android:layout_width="350dp"
    android:layout_height="50dp" />

10
这种硬编码的颜色就像在网页中使用内联CSS。为什么这么多投票呢?例如,它应使用android:background =“?android:attr / dividerHorizo​​ntal”。
Roel

4
因为易于实施
Denny

1
@Roel简单,容易且有效。而且引用颜色而不是对其进行硬编码很简单。我尝试了您的建议,我认为这在技术上会更好,但是似乎没有用-在布局中没有任何分隔符。我应该如何使用?谢谢。
nsandersen,

23

您应该使用新的轻量级视图Space绘制分隔线。如果您使用Space而不是,则布局将加载得更快View

水平分隔线:

<android.support.v4.widget.Space
        android:layout_height="1dp"
        android:layout_width="match_parent" /> 

垂直分隔线:

<android.support.v4.widget.Space
        android:layout_height="match_parent"
        android:layout_width="1dp" />

您还可以添加背景:

<android.support.v4.widget.Space
        android:layout_height="match_parent"
        android:layout_width="1dp"
        android:background="?android:attr/listDivider"/>

用法示例:

....
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="One"/>

<android.support.v4.widget.Space
    android:layout_height="match_parent"
    android:layout_width="1dp"
    android:background="?android:attr/listDivider"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Two"/>

<android.support.v4.widget.Space
    android:layout_height="match_parent"
    android:layout_width="1dp"
    android:background="?android:attr/listDivider"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Three"/>
....

为了使用它,Space您应该在build.gradle中添加依赖

dependencies {
    compile 'com.android.support:support-v4:22.1.+'
}

文档https://developer.android.com/reference/android/support/v4/widget/Space.html


11
的使用Space将令人失望,因为Space它什么也没画(甚至没有背景)。唯一的工作就是占用屏幕空间。解决方案是改用香草View元素。然后将根据需要绘制背景。(然后,如果不需要它,也可以避免对支持库的依赖。)
Ted Hopp

6
Space继承自View,因此它继承定义的所有属性View。(类似地,即使它本身不显示任何文本,它也会LinearLayout继承该textAlignment属性。)随意为自己进行测试(或仅查看源代码),您会发现Space忽略所有与绘图相关的属性。
泰德·霍普

是的,Space不绘制背景,而是透明的。
vovahost

21

在您要分离的视图之间的布局中添加如下所示的内容:

  <View
       android:id="@+id/SplitLine_hor1"
       android:layout_width="match_parent"
       android:layout_height= "2dp"
       android:background="@color/gray" />

希望能帮助到你 :)


2
它将绘制一条垂直线,因为其高度为match_parent且宽度仅为2 dp。
Bhoomika Brahmbhatt 2013年

14

创建一次并在需要时使用它是一个好主意。在您的styles.xml中添加它:

<style name="Divider">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">1dp</item>
    <item name="android:background">?android:attr/listDivider</item>
</style>

并将其添加到需要行分隔符的xml代码中:

<View style="@style/Divider"/>

最初由toddles_fp回答以下问题:布局中的Android图形分隔符/分隔线


9

试试这个

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider"/>

6
<View
       android:id="@+id/view"
       android:layout_width="match_parent"
       android:layout_height="2dp"
       android:background="#000000" />

我们不能以编程方式访问此元素吗?
gumuruh



1

在每个LinearLayout想要在组件之间分配分隔符的父对象中,添加android:divider="?android:dividerHorizontal"android:divider="?android:dividerVertical

根据您的方向在它们之间选择合适的LinearLayout

直到我知道,此资源样式都是从Android 4.3添加的。



0

您可以指定背景颜色的视图(高度=几dpi)。用真实的代码看,这里是:

        <LinearLayout
            android:id="@+id/lineA"
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:background="#000000" />

请注意,它可以是任何一种View


0

---->简单的一个

 <TextView
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#c0c0c0"
    android:id="@+id/your_id"
    android:layout_marginTop="160dp" />

0

如果您不想仅将多余的视图用于下划线。在您的上添加此样式textView

style="?android:listSeparatorTextViewStyle"

不利的一面是它会添加额外的属性,例如

android:textStyle="bold"
android:textAllCaps="true"

您可以轻松覆盖。

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.