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 2013年

回答:


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
このハードコードされた色は、WebページでインラインCSSを使用するようなものです。なぜこれはそんなに投票されたのですか?たとえば、android:background = "?android:attr / dividerHorizo​​ntal"を使用する必要があります。
Roel、2016

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。(同様に、それ自体はテキストを表示しませんがLinearLayouttextAlignment属性を継承します。)これを自分でテストして(または単にソースコードを見て)、がSpace図面関連のすべての属性を無視することを確認してください。
Ted Hopp

はい、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"/>


2

このビューをビューの間に置いて、線を模倣できます

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

2

これを試してみてください

 <View android:layout_width="1dp"
       android:layout_height="match_parent"
       android:background="@color/tw_composer" />

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"

簡単に上書きできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.