我需要创建一个完美的方形 TableLayout。该表是由大小相等的对象组成的网格。这里的问题是,在横向布局中,表格应该占用最大的空间量,但仅此而已。换句话说,我需要 table 的宽度等于允许的最大高度。广告在 Activity 开始后约 10 秒左右出现,这也增加了复杂性。
这是我迄今为止为实现这一目标所做的尝试:
- 我创建了一个水平居中对齐的不可见 View 。然后我将表格的右侧与该 View 对齐。这可行,但对于某些设备,屏幕比例并不能使此设置完美。在像机器人这样的设备上,由于表格宽度小于高度,底行会被挤压。
- 我创建了一个将 adjustViewBounds 设置为 true 的 ImageView。我用一个非常大的方形图像来获取它。我将其设置为位于 adView 上方并对齐顶部并向左对齐。然后我将表格布局设置为与该 ImageView 的边界对齐。这没有用,因为它是一个内存大户,并且当广告弹出时图像边界从未完全调整过。图像源将转到一个较小比例的正方形,但右边界从未调整到新边界。
我认为如果我制作一个 TableLayout 的自定义类并设置 tablewidth = tableheight,这会很容易。我正在为这个想法而苦苦挣扎,因为我不知道我需要把必要的逻辑放在哪里。我想我需要在最初绘制表格时添加它,并在广告移动到位后调整表格时再次添加它。
有人可以帮忙提供一些有关 TableLayout 类的示例代码吗?还有其他方法吗?
太平洋标准时间 3 月 30 日晚上 9:05 更新
在查看 CommonsWare 的建议后,我在自定义 TableLayout 类方面取得了一些进展。我更接近于使用此类实现解决方案,但还有一件事需要解决。新的 TableLayout 不会调整它的边界,因此即使内容的大小正确,宽度仍会占用额外的空间。宽度看起来是在没有广告时设置的,之后它永远不会改变。
这是我非常简单的扩展 TableLayout 类。请注意我将宽度和高度都设置为等于高度的 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 添加了紫色背景以突出显示问题。
最佳答案
由于您已确定的原因,
TableLayout
无法完成您所寻求的。没有内置布局具有将宽度和高度绑定(bind)在一起的概念。很可能,您需要从头开始创建自定义布局管理器,like this one .
关于Android - 方形表格布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494046/