Android

ScrollView 안에 ListView 또는 GridView 사용 시

Ms_Tony 2015. 11. 3. 02:12

레이아웃 구현시..

GridView를 갖는 구조인데 GridView는 스크롤이 안되고 상위 레이아웃에 스크롤을 적용하려면


ScrollView로 전체를 갑싸주고 (스크롤뷰는 Child를 하나만 가질수 있으므로 여러 레이아웃으로 나뉜 경우는 하나로 묶어준다)


xml에서 ScrollView선언시

android:fillViewport="true"로 넣어주면된다.


그리고 또하나 GridView의 모든 엘레멘트를 다 그려주고 동적으로 구해진 높이로 재 조정해서 나타낼 필요가 있으면 다음의 코드를 사용하면 된다.

public class ExpandableHeightGridView extends GridView
{

    boolean expanded = false;

    public ExpandableHeightGridView(Context context)
    {
        super(context);
    }

    public ExpandableHeightGridView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public ExpandableHeightGridView(Context context, AttributeSet attrs,
            int defStyle)
    {
        super(context, attrs, defStyle);
    }

    public boolean isExpanded()
    {
        return expanded;
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        // HACK! TAKE THAT ANDROID!
        if (isExpanded())
        {
            // Calculate entire height by providing a very large height hint.
            // View.MEASURED_SIZE_MASK represents the largest height possible.
            int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);

            ViewGroup.LayoutParams params = getLayoutParams();
            params.height = getMeasuredHeight();
        }
        else
        {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

    public void setExpanded(boolean expanded)
    {
        this.expanded = expanded;
    }
}

GridView를 상속받아서 만들고 실제로 표시될때 높이를 재조정해주는 클래스.

<com.example.ExpandableHeightGridView
    android:id="@+id/myId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:horizontalSpacing="2dp"
    android:isScrollContainer="false"
    android:numColumns="4"
    android:stretchMode="columnWidth"
    android:verticalSpacing="20dp" />

그 후 xml에서 GridView대신 사용


자바코드에선

mAppsGrid = (ExpandableHeightGridView) findViewById(R.id.myId);
mAppsGrid.setExpanded(true);

이런식으로 적용해주면 해결할수있다.

출처 : http://stackoverflow.com/questions/8481844/gridview-height-gets-cut/8483078#8483078

      : http://gochul.tistory.com/21





'Android' 카테고리의 다른 글

TouchEvent 사용법  (0) 2016.03.31
Android 데이터베이스 사용법  (2) 2016.03.29
안드로이드 공유 기능  (0) 2015.10.16
Android Text ClipBoard에 복사하기  (0) 2015.10.15
커스텀 토스트 메시지 사용법  (0) 2015.10.08