리스트뷰 안에 들어가는 아이템들의 간격을 10px 만큼 벌리고 싶었습니다.
dividerHeight 를 주면 되니까 줬더니 안먹습니다.
이래저래 찾아봐도 별 뾰족한 방법이 없었는데,
혹시나 하고 하니 되는군요.
처음엔 이렇게 되어 있었습니다.
간격 띄우고, divider를 안주면 회색 색이 보여지니 투명을 먹였습니다.
mHistoryListView.setDividerHeight(10);
mHistoryListView.setDivider(new ColorDrawable(Color.TRANSPARENT)); 간격이 벌어지지 않습니다. 이렇게 하니 됩니다. mHistoryListView.setDivider(new ColorDrawable(Color.TRANSPARENT));
mHistoryListView.setDividerHeight(10);
음...
오묘합니다.
리스트 뷰 소스를 보시면 이해 하실 것 입니다.
public void setDividerHeight(int height) {
mDividerHeight = height;
requestLayout();
invalidate();
}
public void setDivider(Drawable divider) {
if (divider != null) {
mDividerHeight = divider.getIntrinsicHeight();
} else {
mDividerHeight = 0;
}
mDivider = divider;
mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE;
requestLayout();
invalidate();
}
보시는 데로 setDividerHeight 를 해주면 일단 높이가 설정 됩니다.
하지만 그 후에 다시 setDivider를 통해서 Drawable을 넘겨주면 divider height의 값이
drawable의 높이로 다시 설정이 됩니다.
ListView setDivider 소스를 보시면 의문이 풀리실 듯..
setDivider 메소드 내에서 dividerHeight가 재설정됩니다.
참고로 ColorDrawable의 getIntrinsicHeight() 값은 -1입니다.
public void setDivider(Drawable divider) { if (divider != null) { mDividerHeight = divider.getIntrinsicHeight(); } else { mDividerHeight = 0; } mDivider = divider; mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE; requestLayout(); invalidate(); }
헉 중복 답변이네요..;




디바이더를 설정한 다음 높이를 조정해야 하지 않을까요?
높이를 지정한 다음 디바이더를 설정하면 새로 설정된 디바이더의 높이는? 이라고 생각하면 되지 않을까요?
안드로이드 레퍼런스에 보면 setDevider에 넣어준 Drawable의 높이가 지정되어 있지 않은 경우에는 setDividerHeight를 호출해야 한다고 되어 있습니다.