为什么无法设置tablelayout单元格的宽度?

时间:2012-06-07 15:23:27

标签: android width tablelayout setting

我尝试使用此表格布局: http://blog.stylingandroid.com/archives/432 并遇到了一些麻烦.. 我一直在寻找理由很长时间,我决定更聪明地问:D

我的表格代码:

package com.stylingandroid.ScrollingTable;

import java.util.LinkedList;
import java.util.List;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.Toast;

public class ScrollingTable extends LinearLayout
{
    public ScrollingTable( Context context )
    {
        super( context );
    }

    public ScrollingTable( Context context, AttributeSet attrs )
    {
        super( context, attrs );
    }

    @Override
    protected void onLayout( boolean changed, int l, int t, int r, int b )
    {
        super.onLayout( changed, l, t, r, b );
        List<Integer> colWidths = new LinkedList<Integer>();

        final TableLayout header = (TableLayout) findViewById( R.id.HeaderTable );
        TableLayout body = (TableLayout) findViewById( R.id.BodyTable );

        for ( int rownum = 0; rownum < body.getChildCount(); rownum++ )
        {
            TableRow row = (TableRow) body.getChildAt( rownum );
            for ( int cellnum = 0; cellnum < row.getChildCount(); cellnum++ )
            {
                View cell = row.getChildAt( cellnum );
                Integer cellWidth = cell.getWidth();
                if ( colWidths.size() <= cellnum )
                {
                    colWidths.add( cellWidth );
                }
                else
                {
                    Integer current = colWidths.get( cellnum );
                    if( cellWidth > current )
                    {
                        colWidths.remove( cellnum );
                        colWidths.add( cellnum, cellWidth );
                    }
                }
            }
        }

        for ( int rownum = 0; rownum < header.getChildCount(); rownum++ )
        {

            final TableRow row = (TableRow) header.getChildAt(rownum);
            for (int cellnum = 0; cellnum < row.getChildCount(); cellnum++ ) {
                View cell = row.getChildAt( cellnum );
                TableRow.LayoutParams params = (TableRow.LayoutParams)cell.getLayoutParams();
                params.width = 200;
                cell.setOnClickListener(new OnClickListener(){
                    public void onClick(View v){
                        int wid = v.getWidth();
                         Log.i("crap", "wid" + wid);
                    }
                });

            }
        }
    }
}

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.stylingandroid.ScrollingTable.ScrollingTable
        android:layout_width="fill_parent"
        android:orientation="vertical" android:layout_weight="1"
        android:layout_height="fill_parent">
        <TableLayout android:layout_height="wrap_content"
            android:layout_width="fill_parent" android:id="@+id/HeaderTable">
            <TableRow style="@style/HeaderRow">
                <TextView style="@style/HeaderText" android:text="Col 1" />
                <TextView style="@style/HeaderText" android:layout_weight="1"
                    android:text="Col 2" />
<!--                <TextView style="@style/HeaderText" android:text="Col 3" android:layout_span="2" / -->
<!--                TextView style="@style/HeaderText" android:text="Col 4" / -->
                <TextView style="@style/HeaderText" android:text="Col 333" />
                <TextView style="@style/HeaderText" android:text="Col 4" />
            </TableRow>
            <TableRow style="@style/BodyRow">
                <TextView android:text="Dummy" style="@style/BodyText" android:height="0dp" />
                <TextView android:text="Dummy" style="@style/BodyText"
                    android:layout_weight="1" android:height="0dp" />
                <TextView android:text="Dummy" style="@style/BodyText" android:height="0dp" />
                <TextView android:text="Dummy" style="@style/BodyText" android:height="0dp" />
            </TableRow>
        </TableLayout>
        <ScrollView android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <TableLayout android:layout_height="wrap_content"
                android:layout_width="fill_parent" android:id="@+id/BodyTable">
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 1,1" style="@style/BodyText" />
                    <TextView android:text="Cell 1,2" style="@style/BodyText"
                        android:layout_weight="1"/>
                    <TextView android:text="Cell 1,3" style="@style/BodyText"/>
                    <TextView android:text="Cell 1,4" style="@style/BodyText" />
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 2,1" style="@style/BodyText" />
                    <TextView android:text="Cell 2,2" style="@style/BodyText"
                        android:layout_weight="1" />
<!--                    <TextView android:text="Cell 2,3" style="@style/BodyText" android:layout_span="2"/> -->
<!--                    TextView android:text="Cell 2,4" style="@style/BodyText" / -->
                    <TextView android:text="Cell 2,3" style="@style/BodyText" />
                    <TextView android:text="Cell 2,4" style="@style/BodyText" />                
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 3,1" style="@style/BodyText" />
                    <TextView android:text="Cell 3,2" style="@style/BodyText"
                        android:layout_weight="1" />
                    <TextView android:text="Cell 3,3" style="@style/BodyText" />
                    <TextView android:text="Cell 3,4" style="@style/BodyText" />
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 4,1" style="@style/BodyText" />
                    <TextView android:text="Cell 4,2" style="@style/BodyText"
                        android:layout_weight="1" />
                    <TextView android:text="Cell 4,3" style="@style/BodyText" />
                    <TextView android:text="Cell 4,4" style="@style/BodyText" />
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 5,1" style="@style/BodyText" />
                    <TextView android:text="Cell 5,2" style="@style/BodyText"
                        android:layout_weight="1" />
                    <TextView android:text="Cell 5,3" style="@style/BodyText" />
                    <TextView android:text="Cell 5,4" style="@style/BodyText" />
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 6,1" style="@style/BodyText" />
                    <TextView android:text="Cell 6,2" style="@style/BodyText"
                        android:layout_weight="1" />
                    <TextView android:text="Cell 6,3" style="@style/BodyText" />
                    <TextView android:text="Cell 6,4" style="@style/BodyText" />
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 7,1" style="@style/BodyText" />
                    <TextView android:text="Cell 7,2" style="@style/BodyText"
                        android:layout_weight="1" />
                    <TextView android:text="Cell 7,3" style="@style/BodyText" />
                    <TextView android:text="Cell 7,4" style="@style/BodyText" />
                </TableRow>
                <TableRow style="@style/BodyRow">
                    <TextView android:text="Cell 8,1" style="@style/BodyText" />
                    <TextView android:text="Cell 8,2" style="@style/BodyText"
                        android:layout_weight="1" />
                    <TextView android:text="Cell 8,3" style="@style/BodyText" />
                    <TextView android:text="Cell 8,4" style="@style/BodyText" />
                </TableRow>
            </TableLayout>
        </ScrollView>
    </com.stylingandroid.ScrollingTable.ScrollingTable>
</LinearLayout>

问题在于: 我将宽度设置为固定值,如下所示:     ...     params.width = 200;

但是当我点击标题时,值仍然是200 WTH?

0 个答案:

没有答案