格式化新的 TableRow(以编程方式)

Posted

技术标签:

【中文标题】格式化新的 TableRow(以编程方式)【英文标题】:Formatting new TableRow (Programmatically) 【发布时间】:2015-04-20 03:54:20 【问题描述】:

在 XML 中,我用 TableRow(表格的标题)定义了一个 TableLayout。 每隔一行将以编程方式添加。问题:我无法让新行与 XML 之一对齐

    3个TextView数组,1个TableRow数组 循环使用 TextView 和 TableRows 填充这些数组 全部交给 setTableRowParams 方法 为 TextView 设置文本

    将所有行添加到 TableLayout

    driversNames = new TextView[DRIVERSAMOUNT];
    driversDriven = new TextView[DRIVERSAMOUNT];
    driversRemaining = new TextView[DRIVERSAMOUNT];
    driversRows = new TableRow[DRIVERSAMOUNT];
    
    for (int i = 0; i < DRIVERSAMOUNT; i++) 
    
        driversNames[i] = new TextView(this);
        driversDriven[i] = new TextView(this);
        driversRemaining[i] = new TextView(this);
    
        driversRows[i] = new TableRow(this);
        setTableRowParams(driversRows[i]);
    
        driversNames[i].setText(driversArray[i].getName());
        driversDriven[i].setText("" + driversArray[i].getTimeDriven());
        driversRemaining[i].setText("" + driversArray[i].getTimeRemaining());
    
    
    
        driversRows[i].addView(driversNames[i]);
        driversRows[i].addView(driversDriven[i]);
        driversRows[i].addView(driversRemaining[i]);
    
        tableLayout.addView(driversRows[i]);
    
    
    

    setTableRowParams() 方法

    TableLayout.LayoutParams tableRowParams =
            new TableLayout.LayoutParams
                    (TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
    tableRowParams.setMargins(10, 10, 10, 10);
    
    tr.setLayoutParams(tableRowParams);
    
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_driver"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:elevation="10dp"
            card_view:cardCornerRadius="2dp">
    
            <TableLayout
                android:id="@+id/tableDrivers"
                android:layout_
                android:layout_>
    
                <TableRow
                    android:id="@+id/driversRow1"
                    android:layout_
                    android:layout_
                    android:layout_margin="10dp">
    
                    <TextView
                        android:id="@+id/tVDriversTitle"
                        android:layout_
                        android:layout_
                        android:layout_span="3"
                        android:layout_weight="1"
                        android:text="@string/card_drivers"
                        android:textAppearance="?android:attr/textAppearanceLarge" />
    
                </TableRow>
    
                <TableRow
                    android:id="@+id/driversRow2"
                    android:layout_
                    android:layout_
                    android:layout_margin="10dp">
    
                    <TextView
                        android:id="@+id/tVDriversName"
                        android:layout_
                        android:layout_
                        android:layout_weight="1"
                        android:text="@string/drivers"
                        android:textAppearance="?android:attr/textAppearanceMedium" />
    
                    <TextView
                        android:id="@+id/tVDriversDriven"
                        android:layout_
                        android:layout_
                        android:layout_weight="1"
                        android:text="@string/timeDriven"
                        android:textAppearance="?android:attr/textAppearanceMedium" />
    
                    <TextView
                        android:id="@+id/tVDriversRemaining"
                        android:layout_
                        android:layout_
                        android:layout_weight="1"
                        android:text="@string/timeLeft"
                        android:textAppearance="?android:attr/textAppearanceMedium" />
    
                </TableRow>
    
                <!-- THE VALUES ARE ADDED PROGRAMATICALLY -->
    
            </TableLayout>
    
        </android.support.v7.widget.CardView>
    

这就是结果。如您所见,Driver 1-4 行与标题不一致。对不起外语;-)

你能告诉我我的错误在哪里吗?

【问题讨论】:

【参考方案1】:

您是否尝试过将子视图上的 android:layout_width 属性设置为 0dp(当然,将 android:layout_weight 保持为 1)?

确保所有子级都从相同宽度开始(android:layout_ 在他们两个上)

【讨论】:

谢谢 Fahim,但我不确定你的意思。我应该将哪些元素宽度设置为 0dp?我已经用 XML 部分更新了我的问题。

以上是关于格式化新的 TableRow(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章

使用java以编程方式格式化java代码

以编程方式设置 TextView 的布局权重

以编程方式设置TextView的布局权重

Android:如何将 LinearLayout 的内容垂直包装在 TableRow 中?

如何以特定格式以编程方式创建pdf?

以编程方式对数据表中的数字列进行颜色格式化