TableLayout如何与TableRow一起使用?

时间:2011-08-09 09:53:59

标签: java android

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

在ImageView上我想绘制一个ShapeDrawable(因为我已经覆盖了像2D Graphics - Shape Drawable这样的视图。)

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

我尝试了各种组合(设置LayoutParams,gravity,layout_weight)但没有成功。结果始终相同: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);
  }
}

2 个答案:

答案 0 :(得分:0)

非常感谢。
我找到了另一个解决方案 为了显示渐进值,而不是具有定义尺寸的单个ImageView,
我使用带有x-many ImageView填充填充的水平LinearLayout 所以我解决了我的定位问题,委托Android正确填充空间的工作。

答案 1 :(得分:0)

虽然您已找到其他解决方案,但可以使用

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