簡體   English   中英

TableLayout如何與TableRow一起使用?

[英]How does TableLayout work with TableRow?

我在滾動光標時以編程方式填充了TableLayout。 我在每個光標步驟創建3個項目:TextView,ImageView和TextView。 我的問題是與ImageView。

在ImageView上,我想繪制一個ShapeDrawable(為此,我已經覆蓋了2D Graphics-Shape Drawable之類的視圖)。

在ImageView上,我使用可繪制的XML文件設置了背景資源(以應用形狀屬性)。 為此,我希望高度與同一TableRow上的其他TextView不同。

我嘗試了各種組合(設置LayoutParams,重力,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);
  }
}

不管怎么說,還是要謝謝你。
我找到了另一種解決方案。
為了顯示漸進值,而不是使用具有定義尺寸的單個ImageView,
我將水平LinearLayout與x多個ImageView填充一起使用。
因此,我解決了我的定位問題,將正確填充空間的工作委派給了Android。

盡管您找到了另一種解決方案,但可以使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM