如何通过编程获得两个不同的表';s';单元格';在Android中拥有相同的宽度?

如何通过编程获得两个不同的表';s';单元格';在Android中拥有相同的宽度?,android,layout,Android,Layout,我有两个TableLayout小部件,它们是在活动的onCreate()方法中以编程方式创建的 表1显示在表2的正上方 我正在寻找一种方法,通过编程将Table1和Table2单元格(添加到TableRow中的TextView小部件)的宽度指定为该列中最大的宽度(因为每个单元格中的文本可以是许多不同的值)。这可能吗?大概是这样的: Table1: SomeTextCell1 SomeReallyReallyLongTextCell2 SomeTextCell3 Table2: S

我有两个TableLayout小部件,它们是在活动的onCreate()方法中以编程方式创建的

表1显示在表2的正上方

我正在寻找一种方法,通过编程将Table1和Table2单元格(添加到TableRow中的TextView小部件)的宽度指定为该列中最大的宽度(因为每个单元格中的文本可以是许多不同的值)。这可能吗?大概是这样的:

Table1:
SomeTextCell1       SomeReallyReallyLongTextCell2  SomeTextCell3

Table2:
SomeOtherTextCell1  ShortTextCell2                 SomeOtherTextCell3

在这些TextView小部件的onCreate()方法中获取宽度只会返回0,这有点道理,因为UI还没有布置任何内容。布局完成并且
myTextViewWidget.getWidth()
将返回一个非零值后,是否有一个活动挂钩可以使用?

确定,因此最终解决了这个问题。这是关键。本质上,将全局布局侦听器附加到感兴趣的视图(在我的示例中是Table1和Table2的父视图)并实现侦听器onGlobalLayout()方法。布局完成后会调用一次,以允许getWidth()和getHeight()工作。解决方案的其余部分很简单(如果有点难看的话),这涉及到确定表中列的最大宽度,然后在表行中循环,并将列宽设置为最大列宽。真有魅力


特别感谢KCopock提供了出色的解决方案。

在设置内容视图之前,是否尝试访问此属性?
Table1:
SomeTextCell1       SomeReallyReallyLongTextCell2  SomeTextCell3

Table2:
SomeOtherTextCell1  ShortTextCell2                 SomeOtherTextCell3