Android TableLayout 包含自定义视图只显示第一行
Android TableLayout contains custom view only displays first row
我想使用以下代码将自定义视图添加到 TableLayout:
我的自定义视图class:
public class MyCustomView extends View{
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//draw on canvas
}
}
将视图添加到另一个 class 中的 table 布局:
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);
}
}
}
table只显示第一行:
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
但是如果我将 MyCustomView 更改为从 TextView 继承:
public class MyCustomView extends TextView
table 正确显示所有行:
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
什么是 TextView 有而 View 没有,这导致了 TableLayout 的差异?
我应该向自定义视图中添加一些内容吗?
注意:我尝试将layoutTableLayout.ParamLayout设置为视图的LayoutParamater,同样无效。
谢谢。
我发现如果我想将 WRAP_CONTENT
用于自定义视图的布局参数,我需要在我的自定义视图中覆盖 onMeasure()
以便父布局(即 TableLayout)可以正确识别自定义视图的高度,然后正确显示。
this post 对此有很好的解释。
或者通过使用布局参数而不是使用 WRAP_CONTENT
指定自定义视图的高度也可以。
我想使用以下代码将自定义视图添加到 TableLayout:
我的自定义视图class:
public class MyCustomView extends View{
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//draw on canvas
}
}
将视图添加到另一个 class 中的 table 布局:
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);
}
}
}
table只显示第一行:
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
但是如果我将 MyCustomView 更改为从 TextView 继承:
public class MyCustomView extends TextView
table 正确显示所有行:
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
|我的自定义视图 |我的自定义视图 |我的自定义视图 |
什么是 TextView 有而 View 没有,这导致了 TableLayout 的差异?
我应该向自定义视图中添加一些内容吗?
注意:我尝试将layoutTableLayout.ParamLayout设置为视图的LayoutParamater,同样无效。
谢谢。
我发现如果我想将 WRAP_CONTENT
用于自定义视图的布局参数,我需要在我的自定义视图中覆盖 onMeasure()
以便父布局(即 TableLayout)可以正确识别自定义视图的高度,然后正确显示。
this post 对此有很好的解释。
或者通过使用布局参数而不是使用 WRAP_CONTENT
指定自定义视图的高度也可以。