Android ListView 디바이더 android:id=”@+id/cashItemsList”

이 코드가 있습니다.

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

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



답변

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

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

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


답변

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

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”속성을 추가하십시오.


답변

추가 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>

답변

문제는 필요한 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를 사용하여 설정해야합니다.


답변

문서에서 :

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()가 더 본질적인 높이가없는 경우 디바이더의 순서를 호출해야합니다은 표시하기


답변

귀하는 @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"작동합니다!


답변

로부터 문서 :

파일 위치 :

res / drawable / filename.xml

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

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