복잡한 항목 배경으로 ListView를 추가하려면 추가해야합니다. 위아래의 짝수 / 홀수 및 둥근 모서리에 대해 다릅니다. 다음과 같이 보입니다.
이 모든 것을 레벨리스트를 통해 구현했지만 한 가지 더하고 싶은 것이 있습니다. 이제 하단 항목이 화면 하단 근처에 있습니다. 약간의 공간을 추가하는 것이 좋습니다.
ListView에 하단 여백을 추가하고 싶지 않고 마지막 항목에만 여백이 필요합니다.
이 작업을 수행하는 방법 :
보행인
일종의 해킹 – 빈 TextView가있는 바닥 글을 ListView에 추가합니다. 그러나 바닥 글은 매우 불안정한 것입니다. 보통 notifyDataSetChanged 후에 사라지며 다시 되돌릴 방법이 없습니다.
투명한 픽셀이있는 이미지
디자이너에게 하단 배경 리소스에 투명 픽셀을 추가하도록 요청했습니다. 불행히도이 경우 수직 센터링이 완전히 깨졌습니다. 예를 들어, 다음과 같은 9patch가 있습니다.
그리고 다음과 같은 레이아웃 :
<?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 드로어 블을 구성합니다. 드로어 블 개념에 따르면 가능해야하지만 구현을 찾을 수 없습니다. 누군가 알고있을 수 있습니까?
다른 아이디어가 있습니까?
답변
에서 ListView
a paddingBottom
및 clipToPadding="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"
그렇지 오버 플로우 패딩 영역에 스크롤 막대를 원하는 경우.
답변
다음과 같이 목록에 빈 바닥 글을 추가하십시오.
TextView empty = new TextView(this);
empty.setHeight(150);
listview.addFooterView(empty);
답변
원하는 경우 코드에서 수행 할 수도 있습니다. 예를 들어 여기에서는 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);
}
답변
Clocksmith의 대답은 가장 훌륭하고 영리합니다. 빈 바닥 글보기를 만들 수도 있습니다.
답변
listView XML 코드에 다음 두 줄을 추가합니다.
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true"
답변
또 다른 해결책은 특정 높이로 모의보기를 만드는 것입니다.
getViewCount의 어댑터에서 2를 반환합니다.
getCount에서 yourData.size + 1을 반환합니다.
getViewType에서 요소가 마지막 요소인지 확인하십시오. return 2;
getView에서이 유형을 사용하여 mockview를 채 웁니다.
답변
마지막 항목에만 여백을 추가하고 싶을 것 같습니다.
따라서 이러한 방식으로 getview 메소드에서 목록 항목의 색인을 수행하고 마지막 항목인지 확인한 다음 점진적으로보기에 여백을 추가 할 수 있습니다.