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"에서 셀 주위의 반대

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