수평 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

jelly bean 4.2 api 17
Ahmed-Anas

다른 모든 것을 시도한 경우 LinearLayout의 방향이 올바른지 확인하십시오. 가로 방향으로 구분선의 높이를 설정하는 것은 매우 혼란 스러울 것입니다.
니노 반 후프

1
격분한 SHOWDIVIDERS 아이템을 잊지 마세요 !!!!!!
Fattie

답변:


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 속성이있는 이유가 아닙니까?
Ahmed-Anas

@ death_relic0 안드로이드 : 디바이더의 ListView, 확장 목록보기 및 TabWidget에 대한 아빌입니다
파드마 쿠마

9
감사합니다. 그런데 왜 여기에
Ahmed-Anas

당신이하지 색깔있는 당김, 사용 해봐야 할 것 같습니다
demaksee

7
당신은 당신의 가치 layout_widthlayout_height가치가 섞여있는 것 같습니다 : 수평 layout_width은이어야 "fill_parent"하고 layout_height이어야합니다 "1dp". 세로 구분선도 비슷하게 바꿔야합니다.
제이 Sidri

69

이것을 시도하고, 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> 

다음과 divider같이 LinearLayout 의 속성을 사용합니다 .

<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

@ death_relic0 구분선을위한 별도의 레이아웃을 만든 다음 include 태그를 사용하여 원하는 시간과 장소에 추가하는 것이 어떻습니까? 나는 이것이 더 나아지고 낭비가 없을 것이라고 생각합니다.
GrIsHu 2013

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

1
? android : listDivider를 사용하는 팁에 감사드립니다. 나는 이것이 API 21 이상에서는 보이지 않는다는 것을 알았습니다. 하위 API 버전에서는 작은 회색 선이 표시됩니다
user114676

@KetanMehta 우리는 'android : divider'속성으로 정의 할 것입니다. 드로어 블 또는 색상입니다.
khaintt

android : divider는 API 15 +를 지원합니까?
RoCk RoCk

17

업데이트 : AppCompat을 사용하는 사전 Honeycomb

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:showDividers또는 android:divider속성 만 정의 것들 : app:showDividersapp:divider. 코드에서 당신은 또한 사용해야 LinearLayoutCompat.LayoutParams하지를 LinearLayout.LayoutParams!


이것이 구분선에 세로 여백을 추가하는 유일한 방법입니까?
SARose

1
@SARose 아니요, 언제든지 사용자 지정보기를 만들거나 기존보기 구성 요소를 해킹 할 수 있습니다. 그러나 이것이 기본적이고 선호되는 방법입니다.
Rolf ツ

8

오늘도 같은 문제가 발생했습니다. 이전 답변에서 알 수 있듯이 문제는 드로어 블이 아닌 구분선 태그에 색상을 사용하기 때문에 발생합니다. 그러나 내 자신의 드로어 블 xml을 작성하는 대신 가능한 한 테마 속성을 사용하는 것을 선호합니다. android : attr / dividerHorizontal 및 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);

}

다른 방법이지만 필요는 없습니다.
Ricardo A.

2

디바이더가 너무 커서 디바이더가 표시되지 않을 수 있습니다. 22dip을 설정하면 분할기가 상단에서 22dip, 하단에서 22dip으로 잘립니다. 레이아웃 높이가 44dip보다 작거나 같으면 구분선이 표시되지 않습니다.


1

Kapil Vats 의 답변이 작동하지 않으면 다음과 같이 시도하십시오.

drawable / divider_horizontal_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>

layout / 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"
           >

패딩 속성이 작동하지 않는 문제가 발생하여 디바이더에서 직접 디바이더 높이를 설정해야했습니다.

노트 :

수직 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으로 다른 하드 코딩 된 색상과 마찬가지로)에는 없습니다. 이 문제를 해결하는 간단하고 정확한 방법 Drawableshape드로어 블 과 같은 미리 정의 된 높이 로 색상을 일부로 감싸는 것입니다.


-1

textview 또는 imageview와 같은 별도의보기를 만든 다음 이미지가있는 경우 배경을 설정해야합니다. 다른 이미지는 배경으로 색상을 사용합니다.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.