我想使用以下代码将自定义视图添加到TableLayout中:

我的自定义视图类:

public class MyCustomView extends View{
...
@Override
protected void onDraw(Canvas canvas) {
       super.onDraw(canvas);
      //draw on canvas
   }
}


将视图添加到另一个类的表布局中:

public class MyTableView extends TableLayout{
....
private void AddViews(int column,int row){
    for (int i = 0; i < row; i++) {
        TableRow tableRows = new TableRow(mContext);
        for (int j = 0; j < column; j++) {
            MyCustomView myView= new MyCustomView();
            tableRows.addView(dayView);
        }
        addView(tableRows);
    }

}


}

该表仅显示第一行:

| MyCustomView | MyCustomView | MyCustomView |

但是,如果我将MyCustomView更改为继承自TextView:

public class MyCustomView extends TextView


该表正确显示所有行:

| MyCustomView | MyCustomView | MyCustomView |

| MyCustomView | MyCustomView | MyCustomView |

| MyCustomView | MyCustomView | MyCustomView |

TextView有什么但View没有,这导致TableLayout出现差异?

我应该在自定义视图中添加一些内容吗?

注意:我试图将布局TableLayout.ParamLayout设置为视图的LayoutParamater,它也不起作用。

谢谢。

最佳答案

我发现如果要对自定义视图的布局参数使用onMeasure(),则需要在自定义视图中覆盖WRAP_CONTENT,以便父布局(即TableLayout)可以正确识别自定义视图的高度,然后显示它正确地。

this post 对此有很好的解释。

或者通过使用布局参数而不是使用WRAP_CONTENT指定自定义视图的高度也可以。

关于android - Android TableLayout包含自定义 View ,仅显示第一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29859447/

10-09 04:27