【问题标题】:android: two issues using Tablerow+TextView in Tablelayoutandroid:在Tablelayout中使用Tablerow+TextView的两个问题
【发布时间】:2011-02-10 16:52:40
【问题描述】:

我正在使用 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 一样向下滚动查看。这可能吗?

这是我的代码:

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

    }   

【问题讨论】:

标签: android textview tablelayout tablerow


【解决方案1】:

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

For Details

【讨论】:

  • 肯定会+1。我遇到了类似的问题,这是最简单/更强大的修复。谢谢!
  • 我们怎样才能使两行高度相等?请看我的问题stackoverflow.com/q/10779802/720176
【解决方案2】:

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

您应该像这样在 xml 中设置它们,而不是手动构建 TableRows:

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>

【讨论】:

  • 似乎无法将 添加到 中。程序退出并出现错误。事实上,我看到只有 Views 可以添加到 ScrollView 而不是 Layout。
  • TableLayout 是 View 的后代。它应该工作得很好。错误是什么?
  • 有效。忘记为 ScrollView 添加宽度和高度属性。谢谢同步!
  • @synic 你能用完整的代码编辑 tablerow.xml 文件吗?我遇到了一些错误,不知道应该在该布局中添加什么。
  • 出了点问题! TableRow 行 = (TableRow)inflater.inflate(R.id.tablerow, tl, false); TableRow 行 = (TableRow)inflater.inflate(R.layout.tablerow, tl, false);没关系
【解决方案3】:

在表格行中换行:

默认情况下,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 2012-03-26
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多