我面临着关于这个主题的奇怪行为。
我有一个非常简单的布局,只包含一个空的 RelativeLayout 。
一旦我从用户输入,这个相对布局就会用方形瓷砖填充,以达到类似马赛克的效果。每个图块由包含两个图像的FrameLayout制作(在任何给定时间只绘制一个图像)。我不可能将贴图放在XML布局中,因为我事先并不知道我需要多少贴图。
在我的相对布局的 onSizeChanged 中,我强制在所有切片上调整大小以适应新的大小。
代码是这样的:
public void resizeTiles(int w, int h) {
int l1 = w / X; int l2 = h / Y;
int tileS = (l1 <= l2 ? l1 : l2);
android.view.ViewGroup.LayoutParams lp;
for (Tile t : myTiles) {
lp = t.getLayoutParams();
lp.width = tileS;
lp.height = tileS;
}
}
在我的清单文件中,我有以下内容:
<uses-sdk
android:minSdkVersion="4"
android:targetSdkVersion="4"
/>
因此,目标系统是1.6。
到目前为止一切都那么好,这就像一个魅力......但仅限于2.2。
放置在模拟器2.1-update1或之前的相同二进制文件给我一个空的布局(我也尝试了几个物理设备,结果相同)。
调试,我跟踪问题是在调整大小;评论宽度和高度分配我看到了瓷砖,但比例扭曲。
有关如何使其正常工作的任何建议吗?
提前致谢。
答案 0 :(得分:3)
onSizeChanged()。此时可能已经有一些布局过程在层次结构中发生。
基本答案是:布局参数用于告诉视图的父级,其布局参数在之前执行布局。如果它们发生变化,则必须使布局无效,以使用新参数执行新的完整布局。你永远不应该在布局中间更改这些。
最好的办法就是编写自己的布局管理器。 (如果你正在做瓦片的布局,那么RelativeLayout会做一些你不需要的东西 ton ,这使它的效率大大低于必要。)编写一个简单的布局实际上并不是很难管理器。
您可以使用框架中的简单布局管理器作为指南:
(请注意,即使这些都比您可能需要的要复杂得多,因为它们是用于实现它们的布局的通用目的。我们真的应该有一个真正简单的自定义布局的API演示。)