Android: две проблемы с использованием Tablerow + TextView в Tablelayout - PullRequest
8 голосов
/ 21 апреля 2010

Я использую Tablerow + TextView, чтобы сделать простой просмотр сообщений в блоге и их ответов. В каждом TableRow я вставил TextView. Теперь у меня есть две проблемы:

  1. Текст, который длиннее экрана, не будет автоматически переноситься на несколько строк. Это дизайн TableRow? Я уже установил tr_content.setSingleLine(false); [обновление]. Это было решено, я думаю, я должен изменить Fill_parent на Wrap_content в textView.

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

    }   

Ответы [ 3 ]

17 голосов
/ 12 сентября 2011

Более подходящей вещью для упаковки элементов было бы добавить android: shrinkColumns = "*" или android: shrinkColumns = "1" к TableLayout, это, вероятно, решило бы проблему с переносом.

Подробнее

14 голосов
/ 21 апреля 2010

Это не совсем полный ответ, но на самом деле кажется, что вы делаете это сложным путем.

Вместо того, чтобы создавать свои 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>

Перед циклом получите ссылку на FlaoutInflater:

LayoutInflater inflater = getLayoutInflater();

Затем внутри цикла создайте экземпляр tablerowиспользуя LayoutInflater:

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>
6 голосов
/ 07 января 2014

Чтобы обернуть текст в строки таблицы:

По умолчанию строки TableLayout соответствуют ширине их содержимого, независимо от того, выходит ли оно за границы экрана. Чтобы текстовые ячейки шире, чем экран, переносились в несколько строк, используйте атрибут android:shrinkColumns в TableLayout.

<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 делает обратное. Растягивает столбец до максимально доступной ширины.

И "shrink", и "stretch" рассматривают все строки таблицы для вычисления пространства.

Для прокрутки вниз TableLayout:

Если ваш TableLayout выше экрана, переместите его в ScrollView.

...