IT

Android ListView 디바이더

lottoking 2020. 8. 24. 20:40
반응형

Android ListView 디바이더


이 코드가 있습니다.

<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 대신 1px 또는 1dip를 사용하는 이유는 다음과 달라집니다. 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"XML에서 ListView.


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


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

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

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


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

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


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

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


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>

참고 URL : https://stackoverflow.com/questions/3979218/android-listview-divider

반응형