为了账号安全,请及时绑定邮箱和手机立即绑定

如何使动态生成的表格布局可滚动?

如何使动态生成的表格布局可滚动?

繁华开满天机 2022-05-20 18:27:28
我在 Activity 中有 3 个片段,在其中两个片段中我在 a 中有硬编码TableLayout,ConstraintLayout表的标题和行是使用来自 MySQL 服务器的信息动态生成的。鉴于其动态特性,表格能够溢出页面,我希望它可以滚动。StackOverflow 上已经有多个问题,人们想要一个可滚动的表格,但在这些问题中,表格及其数据是硬编码的(不知道这是否相关)。我已经尝试了这些问题中提出的解决方案,但它们在我的桌子上不起作用。解决方案通常是将TableLayouta包装起来ScrollView或使用这两种方法android:isScrollContainer="1"都不适合我。TableLayout里面ScrollView。用于测试,ScrollView通常它只是TableLayout.<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".ViewProductLocFragment">    <!-- Rest of the fragment -->    <ScrollView        android:layout_width="0dp"        android:layout_height="0dp"        android:layout_marginStart="8dp"        android:layout_marginTop="16dp"        android:layout_marginEnd="8dp"        android:layout_marginBottom="16dp"        android:layout_weight="1"        android:scrollbars="none"        app:layout_constraintBottom_toTopOf="@+id/menuBar"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/view">        <TableLayout            android:id="@+id/tableLayout"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginStart="5dp"            android:layout_marginTop="5dp"            android:layout_marginEnd="5dp"            android:layout_marginBottom="5dp"            android:stretchColumns="*"            app:layout_constraintBottom_toTopOf="@+id/menuBar"            app:layout_constraintEnd_toEndOf="parent"            app:layout_constraintStart_toStartOf="parent"            app:layout_constraintTop_toBottomOf="@+id/view">        </TableLayout>    </ScrollView></android.support.constraint.ConstraintLayout>
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您可以使用TableView 库使您的表格可滚动使用动态数据。链接如下:-
https://github.com/evrencoskun/TableView


查看完整回答
反对 回复 2022-05-20
?
月关宝盒

TA贡献1772条经验 获得超5个赞

我已经尝试通过 Activity 实现您的代码。我发布了我的 Activity 和 XML 代码供您参考,您能否查看完整代码中缺少的内容,以便提供帮助。


MainActivity.java


public class MainActivity extends Activity {


TableLayout tableLayout;


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);


    initializeTableLayout();


}



@Override

protected void onResume() {

    super.onResume();


    fillTable();

}


private void fillTable() {

    Integer count = 0;

    for (int i = 0; i < 100; i++) {


        String barcode = "#0000000000";

        String location = "Location";

        Integer quantity = 1;


        TableRow tableRow = new TableRow(MainActivity.this);

        if (count % 2 != 0) {

            tableRow.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));

        }

        tableRow.setId(View.generateViewId());

        tableRow.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));


        TextView labelBarcode = new TextView(MainActivity.this);

        labelBarcode.setId(View.generateViewId());

        labelBarcode.setGravity(Gravity.CENTER);

        labelBarcode.setTextColor(getResources().getColor(R.color.colorAccent));

        labelBarcode.setTextSize(18);

        labelBarcode.setText(barcode);

        tableRow.addView(labelBarcode);


        TextView labelLocation = new TextView(MainActivity.this);

        labelLocation.setId(View.generateViewId());

        labelLocation.setGravity(Gravity.CENTER);

        labelLocation.setTextColor(getResources().getColor(R.color.colorAccent));

        labelLocation.setTextSize(18);

        labelLocation.setText(location);

        tableRow.addView(labelLocation);


        TextView labelQuantity = new TextView(MainActivity.this);

        labelQuantity.setId(View.generateViewId());

        labelQuantity.setGravity(Gravity.CENTER);

        labelQuantity.setTextColor(getResources().getColor(R.color.colorAccent));

        labelQuantity.setTextSize(18);

        labelQuantity.setText(quantity.toString());

        tableRow.addView(labelQuantity);


        tableLayout.addView(tableRow, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        count++;

    }

}


private void initializeTableLayout() {

    tableLayout = this.findViewById(R.id.tableLayout);

    TableRow tr_head = new TableRow(MainActivity.this);

    tr_head.setId(View.generateViewId());

    tr_head.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));

    tr_head.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));


    TextView label_barcode = new TextView(MainActivity.this);

    label_barcode.setId(View.generateViewId());

    label_barcode.setText("BARCODE");

    label_barcode.setTextSize(20);

    label_barcode.setTextColor(Color.BLACK);

    label_barcode.setGravity(Gravity.CENTER);

    tr_head.addView(label_barcode);// add the column to the table row here


    TextView label_location = new TextView(MainActivity.this);

    label_location.setId(View.generateViewId());// define id that must be         unique

    label_location.setText("LOCATION"); // set the text for the header

    label_location.setTextSize(20);

    label_location.setTextColor(Color.BLACK); // set the color

    label_location.setGravity(Gravity.CENTER);

    tr_head.addView(label_location); // add the column to the table row here


    TextView label_quantity = new TextView(MainActivity.this);

    label_quantity.setId(View.generateViewId());// define id that must be         unique

    label_quantity.setText("QTY"); // set the text for the header

    label_quantity.setTextSize(20);

    label_quantity.setTextColor(Color.BLACK); // set the color

    label_quantity.setGravity(Gravity.CENTER);

    tr_head.addView(label_quantity); // add the column to the table row here


    tableLayout.setScrollContainer(true);

    tableLayout.addView(tr_head, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

}


}

activity_main.xml


    <?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity">


    <ScrollView

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_marginStart="8dp"

        android:layout_marginTop="16dp"

        android:layout_marginEnd="8dp"

        android:layout_marginBottom="16dp"

        android:layout_weight="1"

        android:scrollbars="none">


        <TableLayout

            android:id="@+id/tableLayout"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:layout_marginStart="5dp"

            android:layout_marginTop="5dp"

            android:layout_marginEnd="5dp"

            android:layout_marginBottom="5dp"

            android:stretchColumns="*"

            app:layout_constraintEnd_toEndOf="parent"

            app:layout_constraintStart_toStartOf="parent"></TableLayout>

    </ScrollView>


</android.support.constraint.ConstraintLayout>

我手动添加了 100 个虚拟行来测试它的滚动行为,并想通知您它完全可以正常工作。您的 Activity 或 Fragment 父代码中可能存在阻止表格滚动的问题。


查看完整回答
反对 回复 2022-05-20
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信