programing

목록 사이의 공백을 설정하는 방법Android에서 항목 보기

bestprogram 2023. 8. 5. 10:44

목록 사이의 공백을 설정하는 방법Android에서 항목 보기

listView 항목 사이에 공백을 만들기 위해 listView의 marginBottom을 사용하려고 했지만 여전히 항목이 함께 첨부되어 있습니다.

그게 가능할까요?그렇다면 구체적인 방법이 있습니까?

내 코드는 아래와 같습니다.

<LinearLayout
android:id="@+id/alarm_occurences"
android:layout_width="fill_parent" 
android:orientation="vertical"
android:layout_height="fill_parent"
android:background="#EEEEFF"
xmlns:android="http://schemas.android.com/apk/res/android">

<ListView
android:id="@+id/occurences"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

내 사용자 정의 목록 항목:

<com.android.alarm.listItems.AlarmListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" 
android:background="@drawable/alarm_item_background"
android:layout_marginBottom="10dp"    
>
<CheckedTextView     
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:textSize="20sp"
    android:textStyle="bold"
    android:typeface="serif"
    android:padding="10dp"

/>

</com.android.alarm.listItems.AlarmListItem>

이 경우 목록 항목 사이에 공백을 어떻게 만들 수 있습니까?

@아사히는 거의 정곡을 찔렀지만, 저는 나중에 구글을 통해 여기에 떠도는 사람들을 위해 XML을 조금 추가하고 싶었습니다.

<ListView android:id="@+id/MyListView"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:divider="@android:color/transparent"
  android:dividerHeight="10.0sp"/>

인지, "10. "0", "과 안드로이드에서 됩니다.dividerHeightvalue.와 ". "10.0sp"와 같은 @Goofyahead 참고 사항처럼 이 값에 대해 디스플레이 독립 픽셀(즉, "10dp")을 사용할 수도 있습니다.

아마도 또는 재산.ListView당신의 문제를 해결할 수 있습니다.

Nik Reiman의 솔루션은 효과가 있지만, 제가 하고 싶은 것에 대한 최적의 솔루션은 아니라는 것을 알게 되었습니다.구분선을 사용하여 여백을 설정하면 구분선이 더 이상 표시되지 않으므로 항목 간의 명확한 경계를 표시하는 데 사용할 수 없다는 문제가 있었습니다.또한 각 항목에 "클릭 가능한 영역"을 더 추가하지 않으므로 항목을 클릭 가능하게 만들고 항목이 얇으면 구분자에 의해 추가된 높이가 항목의 일부가 아니기 때문에 누구나 항목을 클릭하기가 매우 어려울 것입니다.

다행히도 저는 칸막이를 둘 다 보여줄 수 있고 여백이 아닌 패딩을 사용하여 각 항목의 높이를 조정할 수 있는 더 나은 솔루션을 찾았습니다.다음은 예입니다.

목록 보기

<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

항목 나열

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"
    android:paddingTop="10dp" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Item"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

당신은 당신의 것을 포장해야 합니다.ListView: 목항예예(:your_listview_item) 다른 레이아웃(예:LinearLayout 에마을추다니가에 을 더합니다.your_listview_item:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <your_listview_item
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
    ...
    ...
    />
</LinearLayout>

이러한 방식으로 필요한 경우 오른쪽과 왼쪽에 공간을 추가할 수도 있습니다.ListViewjava

더 많은 공간을 추가하되 수평선을 유지하기 위한 제 솔루션은 추가하는 것이었습니다.divider.xml에 시대에res/drawable폴더를 지정하고 내부에 선 모양을 정의합니다.

divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >

    <stroke
        android:width="1px"
        android:color="@color/nice_blue" />

</shape>

그런 다음 내 목록에서 나는 다음과 같이 나의 구분자를 참조합니다.

<ListView
    android:id="@+id/listViewScheduledReminders"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_marginBottom="@dimen/mediumMargin"
    android:layout_weight="1"
    android:divider="@drawable/divider"
    android:dividerHeight="16.0dp"
    android:padding="@dimen/smallMargin" >

</ListView>

android:dividerHeight="16.0dp"이 높이를 늘리거나 줄임으로써 기본적으로 구분선의 상단과 하단에 패딩을 추가합니다.

는 이 페이지를 참조용으로 사용했습니다: http://developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element

나의 지원을 위해, 나는 이렇게 했습니다.

 <ListView
    android:id="@+id/staff_jobassigned_listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@null"
    android:dividerHeight="10dp">

</ListView>

그저의set the divider to null그리고 칸막이 높이를 제공하는 것이 저에게 도움이 되었습니다.

예:

android:divider="@null"

또는

android:divider="@android:color/transparent"

그리고 이것은 결과입니다.

enter image description here

여백이 있고 늘어나지 않은 구분자를 표시하려면 InsetDrawable을 사용합니다(크기는 @NikRiman이라고 하는 형식이어야 함).

목록 보기:

<ListView
    android:id="@+id/listView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="#00000000"
    android:divider="@drawable/separator_line"
    android:dividerHeight="10.0px"/>

@drawable/separator_line:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="5.0px"
    android:insetRight="5.0px"
    android:insetTop="8.0px"
    android:insetBottom="8.0px">

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <gradient
            android:startColor="@color/colorStart"
            android:centerColor="@color/colorCenter"
            android:endColor="@color/colorEnd"
            android:type="linear"
            android:angle="0">
        </gradient>
    </shape>
</inset>

사용할 수 있는 항목:

android:divider="@null"
android:dividerHeight="3dp"

예:

<ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView" android:layout_gravity="center_horizontal"
        android:dividerHeight="3dp"
        android:divider="@null" android:clickable="false"/>

이미 답변이 선택되어 있다는 것을 알고 있지만, 이 문제에 부딪혔을 때 저에게 도움이 되었던 것을 공유하고 싶었습니다.

새미가 질문에 올린 것과 유사하게 listView의 각 항목이 자체 레이아웃으로 정의된 listView가 있었습니다.저는 칸막이 높이를 바꾸는 제안된 접근법을 시도했지만, 보이지 않는 칸막이를 사용해도 너무 예뻐 보이지는 않았습니다.몇 가지 실험 후에, 저는 간단히 다음과 같은 것을 추가했습니다.android:paddingBottom="5dip"개별 listView 항목을 정의하는 XML 파일의 마지막 TextView 레이아웃 요소로 이동합니다.

이것은 결국 사용을 통해 제가 달성하고자 했던 것을 정확히 제공했습니다.android:layout_marginBottom저는 칸막이 높이를 높이려고 하는 것보다 미적으로 더 만족스러운 결과를 낼 수 있는 해결책을 찾았습니다.

여백을 주는 대신 패딩을 지정해야 합니다.

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:divider="@android:color/green"
    android:dividerHeight="4dp"
    android:layout_alignParentTop="true"
    android:padding="5dp" >

</ListView>

OR

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:paddingTop="2dp"
    android:divider="@android:color/green"
    android:dividerHeight="4dp"
    android:paddingLeft="1dp"
    android:paddingRight="1dp"
    android:paddingBottom="2dp"
    android:paddingStart="0dp"
    android:paddingEnd="0dp" >

</ListView>

OP의 기존 코드(목록 항목에 이미 패딩이 있음)를 사용하는 가장 간단한 해결책은 다음 코드를 추가하는 것입니다.

listView.setDivider(new ColorDrawable(Color.TRANSPARENT));  //hide the divider
listView.setClipToPadding(false);   // list items won't clip, so padding stays

이 SO 답변이 저에게 도움이 되었습니다.

참고: 여기서 질문한 바와 같이 오래된 플랫폼에서는 목록 항목 재활용에 대한 버그에 직면할 수 있습니다.

목록 구분자의 배경을 투명하게 만들고 필요한 간격에 따라 높이를 설정하면 됩니다.

<ListView 
         android:id="@+id/custom_list"
         android:layout_height="match_parent"
         android:layout_width="match_parent"
         android:divider="#00ffffff"
         android:dividerHeight="20dp"/>
<ListView
    android:clipToPadding="false"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:dividerHeight="10dp"
    android:divider="@null"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>

트세를 합니다.paddingTop,paddingBottom그리고.dividerHeight목록의 맨 위와 맨 아래에 있는 모든 요소와 공백 사이의 간격을 동일하게 하려면 동일한 값으로 설정합니다.

나는 설정clipToPaddingfalse이 패딩 처리된 영역에서 뷰를 그릴 수 있도록 합니다.

나는 설정divider@null리스트 요소 사이의 선을 제거합니다.

목록 항목 사이의 간격을 늘리는 또 다른 방법은 layout_height 특성에 필요한 간격을 제공하여 어댑터 코드에 빈 보기를 추가하는 것입니다.예를 들어 목록 항목 간의 하단 간격을 늘리려면 목록 항목 끝에 이 더미 보기(빈 보기)를 추가합니다.

<View
    android:layout_width="match_parent"
    android:layout_height="15dp"/>

따라서 목록 보기 항목 사이에 15dp의 하단 간격을 제공합니다.상위 레이아웃이 선형 레이아웃이고 방향이 수직인 경우 이를 직접 추가하거나 다른 레이아웃에 대해 적절한 단계를 수행할 수 있습니다.이것이 도움이 되길 바랍니다 :-)

그러면 칸막이 높이를 추가하는 데 도움이 됩니다.

 getListView().setDividerHeight(10)

사용자 정의 보기를 추가하려면 목록 보기 항목 레이아웃 자체에 작은 보기를 추가할 수 있습니다.

구분 기호가 수평 목록 보기에서 작동하지 않는 것처럼 보이기 때문에 수평 목록 보기를 사용하는 경우에는 그다지 좋지 않은 해결책을 찾았습니다. 그러나 일반 목록 보기에서는 어느 쪽이든 작동할 것입니다.

추가하는 중:

<View
android:layout_marginBottom="xx dp/sp"/>

레이아웃의 맨 아래 보기에서 어댑터 클래스에서 팽창하면 항목 사이에 간격이 만들어집니다.

listView 내의 뷰 사이에 간격을 지정하려면 뷰 부풀리기에 패딩을 사용하십시오.

사용할 수 있습니다.android:paddingBottom="(number)dp"&&android:paddingTop="(number)dp"목록 보기 내에서 부풀려진 보기입니다.

구분선 솔루션은 해결책일 뿐입니다. 언젠가 구분선 색상을 사용하고 싶을 때(지금은 투명) 구분선이 늘어선 것을 볼 수 있기 때문입니다.

많은 솔루션이 작동합니다.하지만, 만약 당신이 원하는 것이 항목 간의 여백을 설정하는 것이라면, 제가 생각해낸 가장 간단한 방법은 당신의 항목을 포장하는 것입니다 - 당신의 경우에는 체크됨.텍스트 보기 - 선형 레이아웃에서 루트 레이아웃이 아닌 항목에 대한 여백 형식을 지정합니다.이 포장 레이아웃에 ID를 지정하고 체크 표시와 함께 작성해야 합니다.어댑터의 텍스트 보기입니다.

바로 그겁니다.실제로 목록 보기에 대한 항목 수준에서 여백을 인스턴스화하고 있습니다.ListView는 항목 레이아웃에 대해 알지 못하기 때문에 어댑터만 알고 있습니다.이것은 기본적으로 이전에 무시되었던 항목 레이아웃의 부분을 부풀립니다.

아마도 당신은 가장 바깥쪽 레이아웃에 안드로이드:layout_marginTop = "15dp"와 안드로이드:layout_marginBottom = "15dp"를 추가할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4984313/how-to-set-space-between-listview-items-in-android