태그 보관물: ListView

커스텀 ListView 크기 Parent view만큼 늘리기

ListView나 Adapter view들은 항목이 적으면 거기에 맞춰서 크기를 줄이게 되는데
갤럭시나 갤럭시나 갤럭시같이 요상한 커스텀화로 ListView에서 over scroll을 지원하는 경우
밑은 텅텅비었는데 스크롤이 되어서 밑에 잘린것 같이 보이는 경우가 있습니다.

그래서 또 쓸데없이 ListView의 크기를 굳이 늘려줘야합니다.

int mItemHeightNormal = 0;
 
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    mItemHeightNormal = this.getMeasuredHeight(); // 한 행의 높이를 얻을 수 있습니다.
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    mParentHeight = MeasureSpec.getSize(heightMeasureSpec); // 부모가 요구하는 최대 높이. 다른 view를 고려하지 않아 이걸 높이로 바로 쓰면 가려져도 스크롤이 안되는 상황이.
    this.setMeasuredDimension(parentWidth, mParentHeight);
}
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // 여기서 b-t는 ListView가 가질 실제 높이가 된다
    if (mItemHeightNormal * getCount() > b) { // 스크롤이 안될 상황에서만 b를 최대 높이로 설정
         b = mParentHeight;
    }
    super.onLayout(changed, l, t, r, b);
}

여러가지로 시도해보다 나오게 된 코드인데 더 좋은 방법이 있으면 알려주시길..

ListView에서 selector 사용

ListView에 selector를 사용하려면 ListView에 listSelector 속성으로 줘야한다.

1. ListView 소스

<ListView
android:layout_weight="1"
android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:listSelector="@drawable/list_selector"
    android:verticalSpacing="0dp"
    android:divider="@drawable/div_list"/>

일반적인 selector와 다르게 android:state_pressed만 설정해주면 클릭시 selector가 적용되지 않는다.
레퍼런스에서는 설명도 못찾겠고 미스테리.

2. selector 소스(list_selector.xml)

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:variablePadding="false">
    <item
        android:state_focused="true" android:state_pressed="true"
        android:drawable="@drawable/list_press"
    />
    <item
        android:state_focused="false" android:state_pressed="true"
        android:drawable="@drawable/list_press"
    />
    <item
        android:state_focused="true" android:state_selected="false"
        android:drawable="@drawable/list_high"
    />
    <item
        android:drawable="@color/setup_bg_color"
    />
</selector>