android:在Tablelayout中使用Tablerow + TextView的两个问题

时间:2010-04-21 16:34:27

标签: android textview tablelayout tablerow

我正在使用Tablerow + TextView为博客文章及其回复制作一个简单的视图。在每个TableRow中我都放了一个TextView。现在我有两个问题:

  1. 比屏幕长的文本不会自动换行为多行。是TableRow的设计吗?我已经设置了tr_content.setSingleLine(false); [更新]这已经解决了,我想我应该在textView中将Fill_parent更改为Wrap_content。tr_author_time.setLayoutParams(new LayoutParams( LayoutParams.**WRAP_CONTENT**, LayoutParams.WRAP_CONTENT));

  2. 表格不会像ListView一样滚动。我的行数大于屏幕大小。我希望该表可以向下滚动以便像ListView一样查看。这可能吗?

  3. 这是我的代码:

        TableLayout tl = (TableLayout) findViewById(R.id.article_content_table);
            TextView tr_title = new TextView(this);
        TextView tr_author_time = new TextView(this);
        TextView tr_content = new TextView(this);
        TableRow tr = new TableRow(this);
    
        for(int i = 0; i < BlogPost.size(); i++){
            try{
            // add the author, time
            tr = new TableRow(this);
            /////////////////add author+time row
            BlogPost article = mBlogPost.get(i);
            tr_author_time = new TextView(this);
            tr_author_time.setText(article.author+"("+
                    article.post_time+")");
            tr_author_time.setTextColor(getResources().getColor(R.color.black));
            tr_author_time.setGravity(0x03);
            tr_author_time.setLayoutParams(new LayoutParams( 
                        LayoutParams.FILL_PARENT, 
                        LayoutParams.WRAP_CONTENT)); 
            tr.addView(tr_author_time); 
            tl.addView(tr,new TableLayout.LayoutParams( 
                    LayoutParams.FILL_PARENT, 
                    LayoutParams.WRAP_CONTENT));
            ////////////////////// then add content row
            tr = new TableRow(this);            
            tr_content = new TextView(this);
            tr_content.setText(article.content);
            tr_content.setSingleLine(false);
            tr_content.setGravity(0x03);
            tr_content.setLayoutParams(new LayoutParams( 
                        LayoutParams.FILL_PARENT, 
                        LayoutParams.WRAP_CONTENT));            
            tr.addView(tr_content);       
             tr.setBackgroundResource(R.color.white);
                tl.addView(tr,new TableLayout.LayoutParams( 
                        LayoutParams.FILL_PARENT, 
                        LayoutParams.WRAP_CONTENT));
    
        }   
    

3 个答案:

答案 0 :(得分:17)

包装项目更合适的做法是将android:shrinkColumns =“*”或android:shrinkColumns =“1”添加到TableLayout,这可能已经解决了包装问题。

For Details

答案 1 :(得分:13)

这不是一个完整的答案,但看起来你真的很难这样做。

不是手动构建TableRows,而应该在xml中设置它们,如下所示:

tablerow.xml:

<TableRow xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView android:id="@+id/content"
        android:singleLine="false"
        android:textAppearance="@style/someappearance" />
</TableRow>

在循环之前,获取对LayoutInflater的引用:

LayoutInflater inflater = getLayoutInflater();

然后,在循环内部,使用LayoutInflater创建一个tablerow实例:

TableRow row = (TableRow)inflater.inflate(R.layout.tablerow, tl, false);
TextView content = (TextView)row.findViewById(R.id.content);
content.setText("this is the content");

tl.addView(row);

这将允许您在xml中设置布局,外观和布局参数,使其更易于阅读和调试。

对于滚动问题,您需要将TableLayout添加到ScrollView。你的xml中有这样的东西:

<ScrollView>
    <TableLayout android:id="@+id/arcitle_content_table" />
</ScrollView>

答案 2 :(得分:6)

要在表格行中包装文本:

默认情况下,TableLayout行符合其内容的宽度,无论它超出屏幕范围。要使大于屏幕的文本单元格换行到多行,请在TableLayout上使用android:shrinkColumns属性。

<TableLayout 
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*" />

android:shrinkColumns是要收缩的列的从零开始的索引。它从列中删除了不必要的额外空间并将其缩小:

  • android:shrinkColumns="*"缩小所有列
  • android:shrinkColumns="0"缩小第一列
  • android:shrinkColumns="1,2"缩小第二列和第三列

android:stretchColumns则恰恰相反。它将列拉伸到最大可用宽度。

“缩小”和“拉伸”都考虑表的所有行来计算空间。

向下滚动TableLayout:

如果您的TableLayout高于屏幕,请将其移至ScrollView