Android ListView 디바이더


98

이 코드가 있습니다.

<ListView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList"
     android:cacheColorHint="#00000000"
     android:divider="@drawable/list_divider"></ListView>

어디에 @drawable/list_divider:

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="line">
 <stroke
   android:width="1dp"
   android:color="#8F8F8F"
   android:dashWidth="1dp"
   android:dashGap="1dp" />
</shape>

하지만 칸막이가 보이지 않습니다.


1
이유는 모르겠지만 코드가 없습니다. 여기 다시 :
oriharel

<ListView android : layout_width = "wrap_content"android : layout_height = "wrap_content"android : id = "@ + id / cashItemsList"android : cacheColorHint = "# 00000000"android : divider = "@ drawable / list_divider"> </ ListView>
oriharel

1
목록 구분선은 다음과 같습니다. <shape xmlns : android = " schemas.android.com/apk/res/android"android : shape = "line"> <stroke android : width = "1dp"android : color = "# 8F8F8F" android : dashWidth = "1dp"android : dashGap = "1dp"/> </ shape>
oriharel

코드, 특히 XML / HTML / SGML 코드를 삽입하려면 코드 블록 (101010 아이콘)을 사용하십시오. 지금은 게시물을 수정했습니다.
Lie Ryan

아마도 문제의 원인은 ListAdapter에 있습니다. 어댑터의 areAllItemsEnabled ()에 대해 true를 반환하십시오. 또는 stackoverflow.com/questions/5587826/…보기
grine4ka

답변:


176

여러분, 1dp 또는 1dip 대신 1px를 사용해야하는 이유는 다음과 같습니다. 1dp 또는 1dip을 지정하면 Android가이를 축소합니다. 120dpi 장치에서는 0.75px처럼 변환되어 0으로 반올림됩니다. 일부 장치에서는 2-3 픽셀로 변환되며 일반적으로보기 나쁘거나 엉성해 보입니다.

디바이더의 경우 1 픽셀 디바이더를 원하면 1px가 올바른 높이이며 "모든 것이 딥이어야 함"규칙의 예외 중 하나입니다. 모든 화면에서 1 픽셀이됩니다. 또한 1px는 일반적으로 hdpi 이상 화면에서 더 잘 보입니다.

"더 이상 2012 년이 아닙니다"편집 : 특정 화면 밀도에서 시작하여 dp / dip으로 전환해야 할 수 있습니다.


4
와. 내 생명을 구했습니다. "dip"사용에 대한 Android의 공식 가이드에 포함되어야 함
deeJ

나는 동의한다. 최소한 px에 대한 규칙을 그들이 가지고있는 이유의 예로 언급해야합니다.
Joe Plante

6
ldpi에서는 1dp = 0.75 픽셀이므로 0으로 내림합니다. 그러면 구분선이 그려지지 않아 다른 사용자에게 문제가 될 수 있습니다. 이것은 또한이 스레드에서 px를 모두 사용하는 것에 대해 불평하는 다른 문을 참조합니다. 이것은 나 자신의 문제에 대한 해결책이 될하지 않을 수 있으며, 그것은인지 여부를 선언하는 그에게이야
조 Plante

18
1px는 xxhdpi 장치에서 엄청나게 작아 질 것이며 어떤 시점에서 (장치가 계속해서 더 높은 밀도를 얻음에 따라) 전혀 볼 수 없을 것입니다. Dip은 이것을 피하고 ldpi 장치에 대한 또 다른 해결책은 values-ldpi 폴더에서 1px를 사용하고 더 높은 밀도를 위해 1dip를 사용하는 것입니다.
eski

2
그 답장을 올렸을 때 xxhdpi가 방금 나온 것 같아요. 그러나, 귀하의 게시물 특히 가능성이 xxxxhdpi 수평선에 xxxhdpi와 함께, 의미가
조 Plante

55

이것은 해결 방법이지만 나를 위해 작동합니다.

res / drawable / divider.xml을 다음과 같이 생성했습니다.

<?xml version="1.0" encoding="UTF-8"?>
<shape
  xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient android:startColor="#ffcdcdcd" android:endColor="#ffcdcdcd" android:angle="270.0" />
</shape>

그리고 listview 항목의 styles.xml에 다음 줄을 추가했습니다.

    <item name="android:divider">@drawable/divider</item>
    <item name="android:dividerHeight">1px</item>

중요한 부분은이 1px 설정을 포함하는 것이 었습니다. 물론 드로어 블은 그라디언트 (1px)를 사용하며 이것이 최적의 솔루션이 아닙니다. 뇌졸중을 사용해 보았지만 작동하지 않았습니다. (스타일을 사용하지 않는 것 같으므로 ListView에 android : dividerHeight = "1px"속성을 추가하십시오.


14
또는 모범 사례를 위해 1dp를 사용하십시오.
Tristan Warner-Smith

2
270 각도를 사용하는 이유는 무엇입니까? 목록 구분선은 수평선입니다. 270은 수직 그라디언트입니다.
Christopher Perry

이것은 Android의 버그가 아닙니까? 구분선으로 선 모양이 작동해야하지 않습니까?
Diederik

8
1px 자산은 규칙의 예외입니다
Joe Plante

1
@ TristanWarner-Smith 이것은 올바르지 않습니다. 이 경우 1px를 사용해야합니다. 수락 된 답변을 참조하십시오.
mpellegr 2014 년

27

추가 android:dividerHeight="1px"하면 작동합니다.

<ListView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList"
     android:cacheColorHint="#00000000"
     android:divider="@drawable/list_divider" android:dividerHeight="1px"></ListView>

15

문제는 필요한 android : dividerHeight가 누락되었다는 사실과 드로어 블에 선 두께를 지정하려고한다는 사실에서 비롯됩니다. 이상한 이유. 기본적으로 예제가 작동하도록하려면 다음과 같은 작업을 수행 할 수 있습니다.

드로어 블을 직사각형이나 선으로 만드십시오. 어느 쪽이든 치수를 설정할 수 없으므로 다음 중 하나를 수행하십시오.

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
     <stroke android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" />
</shape>

또는:

<shape xmlns:android="http://schemas.android.com/apk/res/android"  android:shape="rectangle">
     <solid android:color="#8F8F8F"/>
</shape>

그런 다음 사용자 지정 스타일을 만듭니다 (기본 설정 만 있지만 항목을 재사용 할 수있는 것을 좋아합니다).

<style name="dividedListStyle" parent="@android:style/Widget.ListView">
    <item name="android:cacheColorHint">@android:color/transparent</item>
    <item name="android:divider">@drawable/list_divider</item>
    <item name="android:dividerHeight">1dp</item>
</style>

마지막으로 사용자 지정 스타일을 사용하여 목록보기를 선언합니다.

<ListView
     style="@style/dividedListStyle"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList">
</ListView>

알려주지 않으면이 스 니펫을 사용하는 방법을 알고 있다고 가정합니다. 기본적으로 귀하의 질문에 대한 대답은 드로어 블에서 구분선 두께를 설정할 수 없다는 것입니다. 너비를 정의되지 않은 상태로두고 대신 android : dividerHeight를 사용하여 설정해야합니다.


8

문서에서 :

public void setDivider(Drawable divider) on ListView

/**
 * Sets the drawable that will be drawn between each item in the list. If the drawable does
 * not have an intrinsic height, you should also call {@link #setDividerHeight(int)}
 *
 * @param divider The drawable to use.
 */

같은 외모 setDividerHeight()가 더 본질적인 높이가없는 경우 디바이더의 순서를 호출해야합니다은 표시하기


5

귀하는 @drawable/list_divide다음과 같아야합니다 :

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="line">
 <stroke
   android:height="1dp"
   android:color="#8F8F8F"
   android:dashWidth="1dp"
   android:dashGap="1dp" />
</shape>

귀하의 버전에서을 제공하고 android:width="1dp"간단히로 변경하면 android:height="1dp"작동합니다!


5
android : height는 획의 유효한 속성이 아니며 너비는 획의 길이가 아니라 획의 너비를 의미합니다. "솔루션"이 작동하는 유일한 이유는 Android가 해당 높이 값을 인식하지 못하기 때문입니다.
Justin Buser

4

로부터 문서 :

파일 위치 :

res / drawable / filename.xml

파일명은 자원 ID로서 사용된다 .

기본적으로, 당신은라는 이름의 파일을 넣어해야합니다 list_divider.xml으로 res/drawable/당신이 그것을 액세스 할 수 있도록를 R.drawable.list_divider; 그런 식으로 액세스 할 수 있다면 android:divider="@drawable/list_divider".NET 용 XML에서 사용할 수 있습니다 ListView.


나는 이클립스로 작업하기 때문에 그렇게하지 않았다면 코드가 컴파일되지 않을 것입니다. 따라서 파일이 제자리에 있으면 목록보기가 내 사용자 지정 구분선을 무시하는 것 같습니다.
oriharel

2

어떤 사람들은 실선을 경험할 수 있습니다. android:layerType="software"드로어 블을 참조하는 뷰 에 추가하여이 문제를 해결했습니다 .


1

Android 문서는 반올림 오류로 인해 사라지는 일에 대해 경고합니다 ... 아마도 px 대신 dp를 시도하고 반올림 문제인지 확인하기 위해 먼저> 1을 시도 할 수도 있습니다.

참조 http://developer.android.com/guide/practices/screens_support.html#testing를

"높이 / 너비가 1 픽셀 인 이미지"섹션


네. 2 개 이상의 dp / dip을 사용하고 있다면 괜찮습니다. 그러나 1 픽셀 분할기를 원하는 경우 px를 사용하는 것이 좋습니다. 또한 1 픽셀의 더 많은 스크린 부동산을 얻을 플러스 1 x 1 픽셀은 일반적으로 더 나은 모습
조 Plante

1

나는 같은 문제가 있었다. 그러나 뷰를 1px로 만드는 것은 원래 Nexus 7에서 작동하지 않는 것 같습니다. 화면 밀도가 213으로 xhdpi에서 사용되는 240보다 적다는 것을 알았습니다. 그래서 장치가 mdpi 밀도라고 생각했습니다.

내 해결책은 dimens폴더에 dividerHeight매개 변수 가 있도록 만드는 것이 었습니다 . 나는로 설정 2dpvalues-mdpi폴더 만 1dpvalues-hdpi등 폴더.


1

구분선 xml 레이아웃에서 구분선 끝에 "r"을 잊었습니다.

레이아웃을 @ drawable / list_divider라고 부르지 만 디바이더 xml의 이름은 "list_divide"입니다.


-1

android : dividerHeight = "1dp"설정

<ListView
            android:id="@+id/myphnview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@drawable/dividerheight"
            android:background="#E9EAEC"
            android:clickable="true"
    android:divider="@color/white"
                android:dividerHeight="1dp"
                android:headerDividersEnabled="true" >
    </ListView>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.