当我将textView添加到tableLayout中的一行时...如果它的长度更长,它会调整之前的所有值。所有我想要的是,每个textView被包装到文本长度..图片将更好地解释
TableLayout ll = (TableLayout) findViewById(R.id.messhistory);
TextView edit = new TextView(this);
TableRow row = new TableRow(this);
//edit.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
edit.setBackgroundDrawable(getResources().getDrawable(R.drawable.border));
if(true)
{
ImageView iv= new ImageView(this);
row.addView(iv);
iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));
}
row.addView(edit,new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
ll.addView(row);
在添加较长文字之前
添加长文
答案 0 :(得分:1)
您在任何地方都使用edit
的相同实例,因此下次当您将文本放大时,它会包装较大的文本,因此它的(编辑)前一个实例也会变大。
一种可能的解决方案是每次添加文本时创建一个新的编辑实例。
答案 1 :(得分:1)
阅读TableLayout
上的文档,我得到了一个结论:
列的宽度由具有最宽单元格的行定义 那一栏。但是,TableLayout可以将某些列指定为 通过调用setColumnShrinkable()或可收缩或可伸缩 setColumnStretchable()。如果标记为可收缩,则列宽可以 缩小以使表适合其父对象。如果标记为 可拉伸的,可以扩展宽度以适应任何额外的空间。
因此,您注意到的行为是设计的。但要获得类似的效果(没有固定的cloumn宽度),请尝试使用此代码:
// Define a Linearlayout instead of a TableLayout in your layout file
// Set its width to match_parent
// Set its orientation to "vertical"
LinearLayout ll = (LinearLayout) findViewById(R.id.someLinearLayout);
// This serves the same purpose as the TableRow
LinearLayout llRow = new LinearLayout(this);
TextView edit = new TextView(this);
edit.setBackgroundDrawable(getResources().getDrawable(R.drawable.border));
ImageView iv= new ImageView(this);
llRow.addView(iv);
iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));
LinearLayout.LayoutParams llLeft = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
LinearLayout.LayoutParams llRight = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
llLeft.gravity = Gravity.LEFT;
llRight.gravity = Gravity.RIGHT;
// You can set the LayoutParams llLeft(messages appear on left) or
// llRight(messages appear on right) Add "edit" first to make the imageview appear on right
llRow.addView(edit, llLeft);
ll.addView(llRow);