textView调整为tableLayout中最长的TextView

时间:2013-07-22 20:46:07

标签: java android textview tablelayout

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

在添加较长文字之前

enter image description here

添加长文

enter image description here

2 个答案:

答案 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);