我需要创建一个完美的方形TableLayout。该表是大小相等的对象的网格。这里的问题是,在横向布局中,桌子应该占用最大的空间,但仅此而已。换句话说,我需要表格的宽度等于允许的最大高度。在活动开始后大约10秒左右会出现一个广告,这也增加了广告的复杂性。

到目前为止,我已经尝试过完成以下任务:


我创建了一个水平居中对齐的不可见视图。然后,我将表格的右侧与该视图对齐。这可以工作,但对于某些设备,屏幕比例不能使此设置完美。在诸如droid之类的设备上,由于表格的宽度小于高度,因此斜排了下一行。
我创建了一个将AdjustViewBounds设置为true的ImageView。我以非常大的正方形图像作为来源。我将其设置为在adView上方,并顶部对齐和左侧对齐。然后,我将表格布局设置为与该ImageView的边界对齐。这是行不通的,因为这是一次记忆大战,广告弹出时图像边界从未完全调整。图像源将移至较小比例的正方形,但右边界从未调整为新边界。


我认为,如果我对TableLayout进行自定义类并设置tablewidth = tableheight,这可能会非常容易。我正在为这个想法而苦苦挣扎,因为我不知道将所需的逻辑放在哪里。我想我需要在最初绘制表格时添加它,并在广告移动到位后调整表格时再次添加它。

有人可以为TableLayout类提供一些示例代码吗?还有另一种方法吗?

PST更新3/30 9:05 PM

在查看了CommonsWare的建议后,自定义TableLayout类取得了一些进展。我更接近使用此类来解决问题,但是还有一件事要解决。新的TableLayout不会调整其边界,因此即使内容的大小正确,宽度仍会占用其他空间。宽度似乎是在没有广告的情况下设置的,此后再也不会改变。

这是我真正简单的扩展TableLayout类。请注意onMeasure方法,其中我将width和height都设置为高度:

public class SquareTableLayout extends TableLayout {

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, heightMeasureSpec);
    }
}


这是问题的屏幕截图。我在TableLayout中添加了紫色背景以突出显示该问题。

http://ribzy.com/images/tile_takedown_landscape.png

最佳答案

TableLayout由于您确定的原因而无法完成您寻求的目标。没有内置布局将宽度和高度捆绑在一起。最有可能的是,您将需要从头开始创建自定义布局管理器like this one

关于android - Android-Square TableLayout,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5494046/

10-12 06:22