[android] Android에서 상위 ListView 항목 위와 마지막 아래에 여백 추가

이것은 안드로이드의 ListView에서 항목의 레이아웃에 관한 아주 좋은 질문입니다.

상단에 제목 표시 줄이 있고 화면의 나머지 부분을 차지하는 ListView가있는 활동이 있습니다. ListView가 왼쪽, 오른쪽 및 상단에 10dp 패딩으로 나타나기를 원하지만 ListView를 위로 스크롤하면 페이딩 된 가장자리 아래에서 사라지기 전에 상단 10dp 패딩을 덮고 싶습니다. 마찬가지로 맨 아래로 스크롤하면 마지막 목록 항목의 맨 아래와 화면의 실제 맨 아래 사이에 10dp와 함께 마지막 목록 항목이 나타납니다. 이유가 궁금한 경우 원하는 배경 이미지가 있기 때문입니다 ListView를 파고 들어).

ListView 자체에 패딩을 추가하려고 시도했지만 목록을 스크롤하면 패딩 가장자리 아래에서 사라집니다.

나는 웹 개발자 배경에서 왔으며 비유는 첫 번째 목록 항목 위에 (그리고 마지막 목록 항목 아래에) 여백을 추가하는 것입니다.



답변

당신은 썼다 :

ListView 자체에 패딩을 추가하려고 시도했지만 목록을 스크롤하면 패딩 가장자리 아래에서 사라집니다.

ListView's clipToPadding속성을로 설정하십시오 false. 이것은 주위 패딩 가능하게 ListView 하고 레이아웃 (및뿐만 아니라 패딩의 가장자리)의 끝으로 스크롤합니다.

예를 들면 :

<ListView
    android:id="@+id/list_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="10.0sp"
    android:padding="16dip"
    android:clipToPadding="false"/>

android:clipToPaddingViewGroup레이아웃 및 뷰 컨테이너의 기본 클래스 인 XML 속성입니다 .

관련 메소드 호출 은 다음 과 같습니다.

public void setClipToPadding (boolean clipToPadding)


답변

View padding = new View(this);
padding.setHeight(20); // Can only specify in pixels unfortunately. No DIP :-(

ListView myListView = (ListView) findViewById(R.id.my_list_view);

myListView.addHeaderView(padding);
myListView.addFooterView(padding);

myListView.setAdapter(myAdapter);

위의 ListView에는 20 픽셀의 머리글과 바닥 글 패딩이 있습니다.


답변

@Jakobud의 답변에 부록 …

내 listView는 이미 android:divider/android:dividerHeightlistView 항목 사이에 투명 간격을 만들기 위해 속성을 사용하고있었습니다. 이를 통해 간단히 android:headerDividersEnabledand android:footerDividersEnabled속성을 추가 하고 머리글 및 바닥 글보기를로 설정할 수 new View(Activity.this)있었습니다.

listView에 이미 디바이더가 설정되어있는 경우 약간 단순화되었습니다.


답변

ListFragment@Jakobud 및 @ greg7gkb의 솔루션을 기반으로하는을 사용하는 솔루션.

ListView listView = getListView();
listView.setDivider(null);
listView.setDividerHeight(getResources().getDimensionPixelSize(R.dimen.divider_height));
listView.setHeaderDividersEnabled(true);
listView.setFooterDividersEnabled(true);
View padding = new View(getActivity());
listView.addHeaderView(padding);
listView.addFooterView(padding);


답변

@ Gunnar Karlsson의 대답은 좋지만 패딩 뒤에 완전히 있지만 아직 화면에서 완전히 벗어나지 않으면 셀 뷰가 조기에 재활용되는 문제가 있습니다. clipToPadding = 거짓이 담당하며 또는 안드로이드의 미래 버전에서 수정되지 않을 수 설정. ( ListView에의 항목에 clipToPadding를 사용하는 경우 것은 조기에 재활용 얻을 )

부작용이없는 멋진 간단한 해결책이 있습니다.

  1. cell_design.xml에 외부 (선형 또는 상대) 레이아웃 추가
  2. 이 외부 레이아웃에서 패딩 (예 : 10dip)을 추가하여 전체 셀 주위에 “여백”을 만듭니다. (외부 레이아웃의 여백이 아닌 NB 패딩 만 작동 함)
  3. ListView 집합 android:dividerHeight="-10dip"에서 셀 주위의 반대

다른 답변과 비교하여 분배기 색상을 설정할 필요가 없습니다. 최상단 및 최하단 셀에 패딩이 존재하고, 네거티브 디바이더는 사이에 이중 높이 디바이더를 방지합니다.


답변