2017-01-12 5 views
0

일부 프레임 레이아웃을 자동으로 생성하는 사용자 지정 상대 레이아웃이 있습니다. 각 프레임 레이아웃에는 내 CustomView의 높이에 따라 높이와 여백이 있습니다. 그 생성자에서 얻으려고하면 대답 null로 나타납니다. 나는 getHeight()으로 시도했으며 getMeasuredHeight()으로 시도했지만 작동하지 않습니다. onMeasure() 또는 onLayout() 메서드를 재정의 할 수 있지만이 2 메서드는 생성자 후에 호출되기 때문에 얻을 값을 사용할 수 없습니다.xml 생성자에서 CustomView의 높이 가져 오기

<?xml version="1.0" encoding="utf-8"?> 

<com.cviing.cviing.FolderStackLayout 

    android:background="@color/colorAccent" 
    android:id="@+id/activity_cv2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.cviing.cviing.CV2" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 


</com.cviing.cviing.FolderStackLayout> 

등급 :

public class FolderStackLayout extends RelativeLayout { 
    int gap = 10; 
    int foldersNumber = 10; 
    Context context; 
    int height; 
    private int position; 
    int baseTop; 


public FolderStackLayout(Context context) { 
    super(context); 
    init(context, null, 0); 
} 

public FolderStackLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(context, attrs, 0); 

} 

public FolderStackLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(context, attrs, defStyleAttr); 

} 


public void init (Context context, AttributeSet attrs, int defStyleAttr){ 
    this.context = context; 
    createView(); 

} 

@Override 
protected void onLayout(boolean changed, 
         int left, 
         int top, 
         int right, 
         int bottom) { 
    int height = getMeasuredHeight(); 
    if (height > 0) { 
     baseTop = height/getCount() - gap; 
    } 
} 

public int getCount(){ 
    return foldersNumber; 
} 



public int getPosition() { 
    return position; 
} 
public void createView(){ 
} 
} 

내가 어떻게 할 수 있습니까?

답변

0

View을 구성 할 때 높이를 알 수 없습니다. 예를 들어, 내가 가지고 있다고 가정 :

void foo() { 
    new FolderStackLayout(); 
} 

분명히, 그 FolderStackLayout는 높이가 없습니다. 그것은 자바 객체입니다. 위젯과 컨테이너는 부모에게 추가 된 후에 만 ​​측정되고 배치되며, 생성자가 반환 된 후에 오랫동안 사용됩니다.

다른 작업으로 이동해야하는 작업 (예 : 언급 한 onMeasure() 또는 onLayout()).

+0

개체를 만들지 않습니다. 나는 xml 파일에 그것을 만들었고 그의 높이는 MATCH_PARENT라고 지정했다. –

+0

@FabioPiunti : 그건 중요하지 않습니다. – CommonsWare

+0

onMeasure()에서 하위 항목을 추가 할 수 없습니다. onLayout() 또는 onDraw(). 이 mhetods 자주 호출하고 편리하지 않다 –