具有行中多个 TextView 的自定义 TableLayout

2023-12-10

我想创建带有这样的行的自定义表格布局:

TV 用于 TextView,即我想向该行添加 11 个 TextView:

enter image description here

每行都以标题开始,然后添加 5 对 TextView,以便表行与屏幕一样宽。这是我的代码:

public class FlowTable extends TableLayout {

    private Context context;

    public FlowTable(Context context) {
        super(context);
        this.context = context;
    }

    public FlowTable(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public void addContent(List<ResultItem> data) {

        TableRow tableRow = new TableRow(context);

        LayoutParams params = new LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1);

        for (int i = 0; i < data.size(); i++) {

            if (i % 5 == 0) {
                this.addView(tableRow, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

                tableRow = new TableRow(context);
                TextView tvRange = new TextView(context);
                tvRange.setLayoutParams(params);
                tvRange.setText(genRange(i+1));
                tableRow.addView(tvRange);

            }
            TextView tvDistance = new TextView(context);
            tvDistance.setLayoutParams(params);
            tvDistance.setText(String.valueOf(data.get(i).distance));

            TextView tvResult = new TextView(context);
            tvResult.setLayoutParams(params);
            tvResult.setText(data.get(i).result);

            tableRow.addView(tvDistance);
            tableRow.addView(tvResult);
        }
    }

    private String genRange(int currIndex){
        /********************/
        return somestring;
    }
}

使用表:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <packagename.FlowTable
        android:id="@+id/flowTable"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

在片段中:

View root = inflater.inflate(R.layout.fragment_session_summary, container, false);
        FlowTable flowTable = (FlowTable)root.findViewById(R.id.flowTable);
        flowTable.addContent(data);

问题:屏幕只是空的!什么都没有。在我将布局参数添加到 textview 之前,它可以工作,但是 row 没有占据屏幕宽度。我最初的解决方案基于 LinearLayout 示例,因为 TableRow 是 LinearLayout 的扩展。但我无法让它发挥作用。 谢谢。


尝试以编程方式将所有列设置为拉伸(对我来说在 XML 中似乎不起作用):

...
flowTable.addContent(data);
flowTable.setStretchAllColumns(true);

其他一些简单事实:

  • 无需尝试指定高度和宽度对于 TableLayout 中的 TableRow因为它始终是高度=WRAP_CONTENT且宽度=MATCH_PARENT。看表格布局文档这在“类概述”部分中列出
  • 无需尝试指定高度和小部件对于 TableRow 的子级因为它们始终是高度 = WRAP_CONTENT 和宽度 = MATCH_PARENT。看表行文档这在“类概述”部分中列出

我是否也可以谦虚地建议一些重构:

public class FlowTable extends TableLayout {
    private TableRow mCurrentRow;

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

    public FlowTable(Context context) {
        super(context);
        init();
    }

    private void init() {
        mCurrentRow = new TableRow(getContext());
        mCurrentRow.addView(createAndFillTextView("0")); // title for first row
        setStretchAllColumns(true);
    }

    public void addContent(List<ResultInfo> data) {
        for (int i = 0; i < data.size(); i++) {
            if ((i % 5 == 0) && (i != 0) /** Don't do this on 0! */) {
                finishRowAndStartNew(i);
            }

            mCurrentRow.addView(createAndFillTextView(data.get(i).distance));
            mCurrentRow.addView(createAndFillTextView(data.get(i).result));
        }
    }

    private void finishRowAndStartNew(int newRowIndex) {
        addView(mCurrentRow);
        mCurrentRow = new TableRow(getContext());
        mCurrentRow.addView(createAndFillTextView(genRange(newRowIndex+1)));
    }

    private String genRange(int currIndex){
        /********************/
        return String.valueOf(currIndex);
    }

    private TextView createAndFillTextView(String text) {
        TextView tv = new TextView(getContext());
        tv.setText(text);        
        return tv;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有行中多个 TextView 的自定义 TableLayout 的相关文章

随机推荐

  • 如何用StepVerifier验证提供的Mono没有完成?

    With StepVerifier很容易检查是否提供Mono已完成 仅通过expectComplete 中的方法StepVerifier 但是如果需要检查相反的情况该怎么办 我尝试使用这种方法 Test public void neverM
  • 使用 Glide 和 FireBase android 存储和显示图像

    我正在尝试使用 Glide 和 Firebase 上传并显示个人资料图片 上传部分工作成功 但是 如果我尝试从数据库加载该图像 它会显示空白 我的动机是在用户进入活动一次时加载 profile image 他可以点击现有图像并根据自己的意愿
  • 如何在 TeamCity 中构建 Delphi 项目

    我正在尝试在 TeamCity 中构建一个 delphi 项目 但无法让它工作 我正在使用 MSBuild 来构建项目 并且还向构建添加了 BDS 参数 但我不断收到错误 MSB4040 项目中没有目标 您需要注意几件事 首先 需要设置De
  • 运行导出 apk 时出现“java.lang.ClassNotFoundException”错误

    我在 Eclipse 中编写了一个 Android 应用程序 并在手机上使用运行命令 在我的手机上运行成功 但我使用 Android Tools gt Export Signed Application Package 导出我的应用程序 然
  • Go 中独特函数的集合

    我正在尝试在 go 中实现一组功能 上下文是一个事件服务器 我想防止 或至少警告 为一个事件多次添加相同的处理程序 我读过 地图通常用作集合 因为可以轻松检查成员资格 if ok set item ok don t add item els
  • 在 PKCS7 (CMS) 中使用相同的响应 xml 签名对多个位置进行签名

    PDF 文档需要使用国家数字身份进行签名 国家数字身份WebService提供了签署文档的设施 在我的项目中我已经集成了相同的设施 请求设计服务给出响应PKCS7 CMS 格式 我想在多个位置附加相同的响应 因此我在收到来自服务的响应后创建
  • C# 创建缩略图(低质量和大尺寸问题)

    public void CreateThumbnail Image img1 Photo photo string targetDirectoryThumbs int newWidth 700 int newHeight 700 doubl
  • 包含头文件时,路径区分大小写吗?

    给定这个目录树 src MyLibrary MyHeader h src file cpp file cpp include mylibrary myheader h 在 VS 中编译 file cpp 可以 在 gcc 中编译失败 标准怎
  • 防止未经授权的成员加入 Hazelcast 集群

    我们正在更改我们的一个应用程序以使用 Hazelcast 3 11 Community Edition 并在一些主机上运行的多个 JVM 之间进行一些锁定 我们按照语法配置集群 如下所示 public class HazelcastBuil
  • 获取JavaFX中节点的高度(生成布局通道)

    如何在JavaFX中获取节点的高度或首选高度 我有3VBox我想将节点添加到最自由的面板 例如 Childrens Total Height of the children s Sum VBoxA 5 890 VBoxB 4 610 VBo
  • 两台服务器之间的 DDP 不会重新连接

    我有两个流星应用程序通过不同服务器上的 DDP 连接 服务器 A 将数据发送到服务器 B 这就是它们的工作方式 Server A Items new Meteor Collection items Items insert name ite
  • 使用 Storyboard Segue iOS 将数据传递给视图控制器

    我知道有很多关于此的帖子 但我已经尝试了一切 但没有任何效果 因此 我尝试将两个视图控制器之间的对象传递给嵌入导航项中的 DBKIngredientsViewController 我有一个带有标识符 showIngredientsSegue
  • BoxPlot、Matplotlib 内的观察数量

    您好 我正在尝试使用 matplotlib 显示箱线图中的观察数量 一些虚假数据的例子是 data1 150 155 175 200 245 255 395 300 305 320 375 400 420 430 440 data2 225
  • 制作来自 Spirit Qi 的共享指针向量

    这是来自的后续问题上一个问题 我可以从我的语法中解析为字符串向量 但我似乎无法解析为向量指向字符串的共享指针 i e std vector
  • 需要 Pure/jQuery Javascript 解决方案来清除文本区域中的 Word HTML

    我知道这里已经谈到了这个问题 但我还没有找到适合我的情况的可行解决方案 所以我想让智囊团重新开始工作 看看能做些什么 我有一个表单中的文本区域 需要检测何时将某些内容粘贴到其中 并清除任何隐藏的 HTML 和引号 此表单的内容通过电子邮件发
  • 图片而不是单选按钮/文本?

    我有一个包含 9 个选项的单选框选项 我想用图像替换按钮及其旁边的文本 选择将显示 4 种颜色的色样范围 All Black Blue 巧克力 Plum Green Orange Magnolia Woods 因此 我需要所选选项旁边的箭头
  • 使用 Apache POI 获取单元格颜色

    我正在尝试学习如何在一个小项目中使用 Apache POI 我想使用 Excel 通过使用颜色编码的单元格来创建 房间布局 并将数据加载到 Java 程序中 我认为了解如何访问单元格的颜色属性 但我要问的是 是否可以访问空白单元格的颜色 无
  • Windows 安装程序使用 NT AUTHORITY\SYSTEM 而不是登录用户

    我有一个 Windows 安装程序 它在安装过程中创建数据库 安装应用程序时CREATE DATABASE由于 Windows 安装程序使用了错误的用户 进程失败 它正在使用NT AUTHORITY SYSTEM而不是使用登录用户 NT A
  • 无法在主方法中调用方法

    我正在尝试在另一个方法中调用一个方法 例如在 C 中 如下所示 public class Exercise1 Scanner scanner new Scanner System in public int FirstNumber publ
  • 具有行中多个 TextView 的自定义 TableLayout

    我想创建带有这样的行的自定义表格布局 TV 用于 TextView 即我想向该行添加 11 个 TextView 每行都以标题开始 然后添加 5 对 TextView 以便表行与屏幕一样宽 这是我的代码 public class FlowT