2011-03-31 53 views
0

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

这是我到目前为止已经试过来实现:

  • 我创建的是水平排列的中心隐形视图。然后,我将桌子的右侧对齐到这个视图。这种方法可行,但对于某些设备而言,屏幕比例并不能使此设置完美。在像机器人这样的设备上,由于表格的宽度小于高度,所以底部的行被放入。
  • 我创建了一个ImageView,其中adjustViewBounds设置为true。我用一个非常大的方形图片来源。我已将它设置为在adView上方并对齐顶部并对齐左侧。然后,我将表格布局设置为与该ImageView的边界对齐。这不起作用,因为它是一个记忆猪,并且当广告弹出时图像边界从未完全调整过。图像源将转到较小的缩放广场,但右边界从未调整到新边界。

我认为这可能是非常容易的,如果我做了一个TableLayout的自定义类并设置tablewidth = tableheight。我正在为这个想法苦苦挣扎,因为我不知道我需要什么地方放置必要的逻辑。我想我需要在表格初始绘制时添加它,并且在广告移动到位后再次调整表格。

有人可以帮助一些示例代码在TableLayout类?有没有另一种方法来做到这一点?

更新3/30 9:05 PM PST

我已经通过从CommonsWare建议看后做出一个自定义TableLayout类的一些进展。我更接近使用这个类来实现解决方案,但还有一件事要解决。新的TableLayout不会调整它的边界,因此即使内容大小正确,宽度仍占用额外的空间。宽度看起来是在没有广告时设置的,并且在此之后从未改变。

这是我非常简单的扩展TableLayout类。注意其中I设定的宽度和高度都等于高度的onMeasure方法:

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

回答

1

TableLayout不能完成你所追求的,因为你已经确定的原因。没有将宽度和高度连接在一起的内置布局。很可能,您需要从头开始创建自定义布局管理器,like this one