ListView 마지막 요소에 아래쪽 여백 추가


83

복잡한 항목 배경으로 ListView를 추가하려면 추가해야합니다. 위아래의 짝수 / 홀수 및 둥근 모서리에 대해 다릅니다. 다음과 같이 보입니다.

ListView 상단

이 모든 것을 레벨리스트를 통해 구현했지만 한 가지 더하고 싶은 것이 있습니다. 이제 하단 항목이 화면 하단 근처에 있습니다. 약간의 공간을 추가하는 것이 좋습니다.

ListView 하단이 좋지 않은 것 같습니다.

ListView에 하단 여백을 추가하고 싶지 않고 마지막 항목에만 여백이 필요합니다.

이 작업을 수행하는 방법 :

보행인

일종의 해킹 – 빈 TextView가있는 바닥 글을 ListView에 추가합니다. 그러나 바닥 글은 매우 불안정한 것입니다. 보통 notifyDataSetChanged 후에 사라지며 다시 되돌릴 방법이 없습니다.

투명한 픽셀이있는 이미지

디자이너에게 하단 배경 리소스에 투명 픽셀을 추가하도록 요청했습니다. 불행히도이 경우 수직 센터링이 완전히 깨졌습니다. 예를 들어, 다음과 같은 9patch가 있습니다.

9 패치

그리고 다음과 같은 레이아웃 :

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
        >
    <!-- View with background with transparent pixels on bottom -->
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
                  android:id="@+id/item"
                  android:background="@drawable/some_bgr"
                  android:padding="10dp"
            >
        <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"
                  android:text="Title"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:text="Detail"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
    </LinearLayout>

    <!-- Just for marking place took by view -->
    <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
                 android:layout_below="@id/item"
                 android:background="#88ff55"
            />
</RelativeLayout>

결과:

결과

보시다시피 센터링이 작동하지 않습니다. 운수 나쁘게. (이 9 패치를 TextView에 대한 배경으로 지정하면 센터링이 잘 작동합니다. 아는 기사가 있으면 설명해주세요.)

어댑터 구현의 마지막 항목에 하단 여백 추가

작동하지만 알 수없는 이유로 여전히 작동하지 않습니다. 나는 코드에서 치수를 수정하는 것을 좋아하지 않기 때문에 이런 방식을 좋아하지 않습니다.

그래서

이미 상상의 방법이 있습니다. 특정 비트 맵과 여백을 사용하여 XML 드로어 블을 구성합니다. 드로어 블 개념에 따르면 가능해야하지만 구현을 찾을 수 없습니다. 누군가 알고있을 수 있습니까?

다른 아이디어가 있습니까?


마지막 항목 뒤에 여백을 추가하고 싶습니까?
Goofy

예. 정확히 같은 질문의 소리
darja

내 대답은 아래 확인하시기 바랍니다
구피

실제로 바닥 글 접근 방식을 사용하는 것을 고려할 것입니다. 특히 notifyDataSetChanged().에 전화 한 후가 아니라 저절로 사라지는 것을 본 적이 없습니다 . 그럴 경우 다른 일을 잘못하고있을 수 있습니다. 바닥 글은에서 관리 ListView하며 어댑터의 실제 데이터 세트와 거의 관련이 없습니다.
MH.

가장 좋은 방법은 [이다 stackoverflow.com/questions/6288167/... [1] : stackoverflow.com/questions/6288167/... 이 정말 도움이
Bunyod을

답변:


280

에서 ListViewa paddingBottomclipToPadding="false".

  <ListView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:paddingBottom="8dp"
      android:clipToPadding="false"
      android:scrollbarStyle="outsideOverlay"/>
  • 이것은 RecyclerView.

  • 만 사용하십시오 android:scrollbarStyle="outsideOverlay"그렇지 오버 플로우 패딩 영역에 스크롤 막대를 원하는 경우.


하단에서 내 8dp가 잘립니다 ... 실제로 마지막 항목에만 8dp 하단을 원합니다.
Elizabeth

2
@AndroidBeginner 나는 당신이 원하는 것을 이해하지 못합니다. 이것이 바로 이것이하는 일입니다.
clocksmith

12
추가하는 것을 잊지 마세요. android:scrollbarStyle="outsideOverlay"그러면 스크롤바가 패딩 안에 머물지 않습니다
gfpacheco

1
색상에 약간의 문제가있을 수 있습니다. 바닥 패딩 목록보기의 배경 색상, 마지막 항목이 아닌 배경색이
grine4ka

이것을 사용하여 SwipeRefreshLayout 새로 고침 표시기를 관리 할 수 ​​있습니까?
Hemant Kaushik

8

다음과 같이 목록에 빈 바닥 글을 추가하십시오.

TextView empty = new TextView(this);
empty.setHeight(150);
listview.addFooterView(empty);

그것을 위해 추천합니다 : listview.addFooterView (empty, data : null, isSelectable : false);
Simon

4

원하는 경우 코드에서 수행 할 수도 있습니다. 예를 들어 여기에서는 EditText 다른 상황에 반응합니다.

   if(s.toString().length()>0)
   {
      contacts_lv.setClipToPadding(false);
      contacts_lv.setPadding(0,0,0,270*screenDensity);
   }
   else
   {
      contacts_lv.setClipToPadding(true);
      contacts_lv.setPadding(0,0,0,0);
   }

2

Clocksmith의 대답은 가장 훌륭하고 영리합니다. 빈 바닥 글보기를 만들 수도 있습니다.


1
첫 번째 솔루션은 작동하지 않았다, 그러나 당신의 제안은, 참으로 좋은 아이디어는 감사 않았다
바드르

1

listView XML 코드에 다음 두 줄을 추가합니다.

android:transcriptMode="alwaysScroll"  
android:stackFromBottom="true"

0

또 다른 해결책은 특정 높이로 모의보기를 만드는 것입니다.

getViewCount의 어댑터에서 2를 반환합니다.

getCount에서 yourData.size + 1을 반환합니다.

getViewType에서 요소가 마지막 요소인지 확인하십시오. return 2;

getView에서이 유형을 사용하여 mockview를 채 웁니다.


-2

마지막 항목에만 여백을 추가하고 싶을 것 같습니다.

따라서 이러한 방식으로 getview 메소드에서 목록 항목의 색인을 수행하고 마지막 항목인지 확인한 다음 점진적으로보기에 여백을 추가 할 수 있습니다.


이 방법은 "어댑터 구현의 마지막 항목에 하단 여백 추가"에서 설명했습니다. 더 우아한 방법이 있을까.
darja jul.

왜 이런 식으로하고 싶지 않습니까?
Goofy

문제의 설명을 참조하십시오.
darja jul.

다른 아이디어 - 그래서 유일한 방법이 될 것 같다
darja

@Goofy 목록의 마지막 행보기에 여백을 어떻게 추가합니까?
vrunoa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.