0

当我将 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);

在添加更长的文本之前

在此处输入图像描述

添加长文本后

在此处输入图像描述

4

2 回答 2

1

您在任何地方都使用相同的实例edit,因此下次当您使文本变大时,它会包裹较大的文本,因此它(编辑)以前的实例也会变大。一种可能的解决方案是在每次添加文本时创建一个新的编辑实例。

于 2013-07-22T21:09:54.337 回答
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);
于 2013-07-22T21:25:59.707 回答