将视图添加到表格布局的底部

时间:2016-03-07 00:04:28

标签: android xml android-tablelayout

我正在研究一个Android项目,我有一个表格布局。我有表格布局,在表格标题的XML布局文件中有一行。表格的其余部分是根据API的结果动态填充的。

我正在将视图添加到表格布局中,但我正在动态添加的行显示在表格标题上方。

以下是我的XML布局:

auto increment

以下是我填充表格其余部分的方法

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <include layout="@layout/toolbar" />
    <TableLayout android:id="@+id/tblAuthenticatedDevices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="1"
        android:shrinkColumns="false"
        android:layout_margin="10dp"/>
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/cardToolbar">
            <TextView
                android:text="Device Name"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:textStyle="bold"
                android:padding="10dp"
                android:textColor="@color/white" />
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="Last Logged In"
                android:textStyle="bold"
                android:padding="10dp"
                android:textColor="@color/white" />
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="From"
                android:textStyle="bold"
                android:padding="10dp"
                android:textColor="@color/white"/>
        </TableRow>
</LinearLayout>

为了重新迭代,我动态添加到表中的行数据显示在我添加到XML布局的行标题上方。我希望行标题出现,然后在下面会出现我正在添加到表中的行。

3 个答案:

答案 0 :(得分:2)

好的,所以我一直在研究TableLayouts,其中总是包含一个标题,基本上,所有这些只是首先通过代码添加TableRow标题,以便它在顶部。所以这就是我为你做的参考。首先,我只为标题做了一个单独的布局。

  

tr_header.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:textStyle="bold"
        android:id="@+id/tv_device_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="device name" />

    <TextView
        android:id="@+id/tv_last_login"
        android:textStyle="bold"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="last_login" />

    <TextView
        android:id="@+id/tv_location"
        android:layout_width="0dp"
        android:textStyle="bold"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="location" />

</TableRow>

然后在tableLayout所在的活动的布局中,我只是把它保持为空,就像这样......

  

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.aalawi.myapplication.MainActivity">

    <TableLayout
        android:id="@+id/tblAuthenticatedDevices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:shrinkColumns="false"
        android:stretchColumns="1" />

</LinearLayout>

然后在代码中,我首先添加标题,然后迭代一些示例数据。另外,我假设你的table_rows也有不同的布局,如你提供的代码中所提到的( 名为table_row_layout ),所以我做了类似的事情。

  

tl_row.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="3">

    <TextView
        android:id="@+id/tv_device_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:id="@+id/tv_last_login"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:id="@+id/tv_location"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" />

</TableRow>
  

MainActivity.java

public class MainActivity extends AppCompatActivity {


    private TableLayout tl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();
    }


    private void initViews() {
        tl = (TableLayout) findViewById(R.id.tblAuthenticatedDevices);

        List<String> deviceNames = Arrays.asList("1", "2", "3");
        List<String> lastLogin = Arrays.asList("11", "22", "33");
        List<String> location = Arrays.asList("111", "222", "333");

        // Add Header First...
        TableRow header = (TableRow) getLayoutInflater().inflate(R.layout.tr_header, null);
        tl.addView(header);

        // Fill additional rows...
        for (int i = 0; i < deviceNames.size(); i++) {
            TableRow row = (TableRow) getLayoutInflater().inflate(R.layout.tl_row, tl, false);
            TextView txtDeviceName = (TextView) row.findViewById(R.id.tv_device_name);
            TextView txtLastLoggedIn = (TextView) row.findViewById(R.id.tv_last_login);
            TextView txtLocation = (TextView) row.findViewById(R.id.tv_location);

            txtDeviceName.setText(deviceNames.get(i));
            txtLastLoggedIn.setText(lastLogin.get(i));
            txtLocation.setText(location.get(i));

            tl.addView(row);
        }
    }

}

这导致了这一点。

enter image description here

答案 1 :(得分:0)

在创建数据行之前添加此项以创建标题:

        TableRow rowHeader = new TableRow(context);
          rowHeader.setBackgroundColor(Color.parseColor("#c0c0c0"));
          rowHeader.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
               TableLayout.LayoutParams.WRAP_CONTENT));

          //Title header for each column here
          String[] headerText={"ID","NAME","TYPE"};

          for(String c:headerText) {
            TextView tv = new TextView(this);
            tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                  TableRow.LayoutParams.WRAP_CONTENT));
            tv.setGravity(Gravity.CENTER);
            tv.setTextSize(18);
            tv.setPadding(5, 5, 5, 5);
            tv.setText(c);
            rowHeader.addView(tv);
          }
          tableLayout.addView(rowHeader);

答案 2 :(得分:0)

今天早上我再看一眼时,我已经意识到自己做错了什么。

我已经结束了表格布局(即我有<TableLayout... />)然后我已经添加了我的TableRow但它在TableLayout之外。

相反,我将我的标题放在TableLayout标记内,如下所示,它按预期工作。

<TableLayout android:id="@+id/tblAuthenticatedDevices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="1"
        android:shrinkColumns="false"
        android:layout_margin="10dp">
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/cardToolbar">
            <TextView
                android:text="Device Name"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:textStyle="bold"
                android:padding="10dp"
                android:textColor="@color/white" />
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="Last Logged In"
                android:textStyle="bold"
                android:padding="10dp"
                android:textColor="@color/white" />
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="From"
                android:textStyle="bold"
                android:padding="10dp"
                android:textColor="@color/white"/>
        </TableRow>
    </TableLayout>