일부 프레임 레이아웃을 자동으로 생성하는 사용자 지정 상대 레이아웃이 있습니다. 각 프레임 레이아웃에는 내 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(){
}
}
내가 어떻게 할 수 있습니까?
개체를 만들지 않습니다. 나는 xml 파일에 그것을 만들었고 그의 높이는 MATCH_PARENT라고 지정했다. –
@FabioPiunti : 그건 중요하지 않습니다. – CommonsWare
onMeasure()에서 하위 항목을 추가 할 수 없습니다. onLayout() 또는 onDraw(). 이 mhetods 자주 호출하고 편리하지 않다 –