Java TableLayout如何处理TableRow?

Java TableLayout如何处理TableRow?,java,android,Java,Android,我在滚动光标时以编程方式填充了一个TableLayout。我每个光标步骤创建3个项目:TextView、ImageView和TextView。我的问题是ImageView 在ImageView上,我想画一个ShapeDrawable(因为我已经覆盖了这样的视图) 在ImageView上,我使用可绘制的XML文件设置了一个背景资源(用于应用形状属性)。为此,我希望高度与同一表格行上的其他TextView不同 我尝试了各种组合(设置布局参数、重力、布局重量),但没有成功。结果总是一样的:ImageV

我在滚动光标时以编程方式填充了一个TableLayout。我每个光标步骤创建3个项目:TextView、ImageView和TextView。我的问题是ImageView

在ImageView上,我想画一个ShapeDrawable(因为我已经覆盖了这样的视图)

在ImageView上,我使用可绘制的XML文件设置了一个背景资源(用于应用形状属性)。为此,我希望高度与同一表格行上的其他TextView不同

我尝试了各种组合(设置布局参数、重力、布局重量),但没有成功。结果总是一样的:ImageView与TableRow的高度相同

下面是一些代码:

TableLayout tl = (TableLayout)findViewById(R.id.list_show_stats);
tl.setColumnStretchable(1, true);
tl.setColumnShrinkable(0, true);

for every cursor step
  TableRow tr = new TableRow(this);
  TableRow.LayoutParams tr_lp = new TableRow.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
  tr.setLayoutParams(tr_lp);
  tr.setBaselineAligned(true);

  TextView tv1 = new TextView(this);
  LayoutParams tv1lp = new TableRow.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT, 1L);
  tv1lp.column = 0;
  tv1lp.gravity = Gravity.LEFT|Gravity.CENTER_VERTICAL;
  tv1.setLayoutParams(tv1lp);
  tv1.setText(" description ");

  ImageView img = new ImageView(this);
  CustomImgBarDrawableView dw = new CustomImgBarDrawableView(this, width, height);
  img.setImageDrawable(dw.mDrawable);
  LayoutParams lp = new TableRow.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT, 1L);
  lp.gravity = Gravity.LEFT;
  lp.column = 1;
  img.setLayoutParams(lp);
  img.setBackgroundResource(R.drawable.layout_showbar);

  TextView tv2 = new TextView(this);
  LayoutParams tv2lp = new TableRow.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT, 1L);
  tv2lp.column = 2;
  tv2lp.gravity = Gravity.RIGHT|Gravity.CENTER_VERTICAL|Gravity.FILL_HORIZONTAL;
  tv2.setLayoutParams(tv2lp);
  tv2.setText(" value ");

  tr.addView(tv1);
  tr.addView(img);
  tr.addView(tv2);
  tl.addView(tr,new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT))




public class CustomImgBarDrawableView extends View {
  private ShapeDrawable mDrawable;
  public CustomImgBarDrawableView(Context context, int w, int h) {
    super(context);
    mDrawable = new ShapeDrawable(new RectShape());
    mDrawable.setIntrinsicHeight(h);
    mDrawable.setIntrinsicWidth(w);
  }
  protected void onDraw(Canvas canvas) {
    mDrawable.draw(canvas);
  }
}
无论如何,谢谢。
我找到了另一个解决方案。
要显示累进值,而不是具有定义尺寸的单个ImageView,
我使用带有x-many ImageView填充的水平线性布局。

所以我解决了我的定位问题,授权Android正确填充空间。

虽然你找到了另一个解决方案,但你可以使用

img.setLayoutParams(new TableRow.LayoutParams(width,height));