Android ScrollView에 사용자 정의 View 추가

최근에 프로젝트를 할 때 scrollview에 자신이 정의한view를 추가해야 하는데 일부 코드는 다음과 같다.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customerview="http://schemas.android.com/apk/res/com.rising.customivew"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <com.rising.view.RectProgressView
            android:id="@+id/rect_progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom" />

여러 차례의 테스트를 통해 안에 사용자 정의view가 계속 표시되지 않는 것을 발견했고 마지막 디버깅은 원인을 찾았습니다. 원래는 onMeasure 방법의 높이가 줄곧 0이었습니다.
@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
         int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);  
         int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);  
         int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);  
         int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);  
         if (widthSpecMode == MeasureSpec.EXACTLY || widthSpecMode == MeasureSpec.AT_MOST) {  
             mWidth = widthSpecSize;  
         } else {  
             mWidth = 0;  
         }  
         if (heightSpecMode == MeasureSpec.AT_MOST || heightSpecMode == MeasureSpec.UNSPECIFIED) {  
             mHeight = dipToPx(30);//              
         } else {  
             mHeight = heightSpecSize;  
         }  
         setMeasuredDimension(mWidth, mHeight);  
    }

원인은 다음과 같다.scrollview가 초기화할 때 사용자 정의View의 높이가 확실하지 않아서view를 그릴 수 없기 때문에view는 표시되지 않는다. 해결 방법은onmeasure 방법에 고정된 크기를 설정하는 것이다.

좋은 웹페이지 즐겨찾기