8

Tablerow + TextViewを使用して、ブログの投稿とその返信を簡単に表示しています。各TableRowにTextViewを配置しました。今、2つの問題があります。

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

    }   
4

3 に答える 3

17

アイテムをラッピングするためのより適切な方法は、android:shrinkColumns = "*"またはandroid:shrinkColumns = "1"をTableLayoutに追加することでした。これにより、ラッピングの問題が修正された可能性があります。

詳細については

于 2011-09-12T13:30:52.230 に答える
14

これは完全な答えではありませんが、これを難しい方法で行っているようです。

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>
于 2010-04-21T17:26:00.910 に答える
7

表の行でテキストを折り返すには:

デフォルトでは、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"2列目と3列目を縮小します

android:stretchColumns反対のことをします。カラムを利用可能な最大幅まで伸ばします。

「shrink」と「stretch」はどちらも、テーブルのすべての行を考慮してスペースを計算します。

TableLayoutを下にスクロールするには:

TableLayout画面より高い場合は、で移動しますScrollView

于 2014-01-07T15:27:29.537 に答える