滚动游标时,我以编程方式填充了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);
}
}
答案 0 :(得分:0)
非常感谢。
我找到了另一个解决方案
为了显示渐进值,而不是具有定义尺寸的单个ImageView,
我使用带有x-many ImageView填充填充的水平LinearLayout
所以我解决了我的定位问题,委托Android正确填充空间的工作。
答案 1 :(得分:0)
虽然您已找到其他解决方案,但可以使用
img.setLayoutParams(new TableRow.LayoutParams(width,height));