在xml构造函数

时间:2017-01-12 20:49:49

标签: android xml constructor height android-custom-view

我有一个自定义相对布局,可自动生成一些帧布局。每个帧布局都有一个高度和边距顶部,它取决于我的CustomView的高度。如果我试图从构造函数得到它我收到null作为答案。我尝试使用getHeight()getMeasuredHeight(),但它不起作用。我可以覆盖onMeasure()onLayout()方法,但我不能使用我得到的值,因为在构造函数之后调用了这两个方法。

<?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(){
}
}

我该怎么办?

1 个答案:

答案 0 :(得分:0)

View构建时的高度未知。例如,假设我有:

void foo() {
  new FolderStackLayout();
}

显然,FolderStackLayout不会有高度。它是一个Java对象,仅此而已。小部件和容器只有在添加到某个父级之后的某个时间才会被测量和布局,并且在构造函数返回后很长时间。

根据这种需要移动到其他地方,无论您正在做什么工作,例如您提到的onMeasure()onLayout()