Android 可见性状态消失的视图占用屏幕空间
我遇到一个问题,即可见性状态为“已消失”的视图(不希望)占用屏幕空间。此问题始终发生在API级别Ok上。我一点也不明白在你的情况下它是如何吸引你的。但我认为你应该在结账后打电话给super.onLayout()。像这样:Android 可见性状态消失的视图占用屏幕空间,android,android-widget,android-layout,Android,Android Widget,Android Layout,我遇到一个问题,即可见性状态为“已消失”的视图(不希望)占用屏幕空间。此问题始终发生在API级别Ok上。我一点也不明白在你的情况下它是如何吸引你的。但我认为你应该在结账后打电话给super.onLayout()。像这样: protected void onLayout(boolean changed, int l, int t, int r, int b) { if(initialDraw) { setContentsVisible(false); ini
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if(initialDraw) {
setContentsVisible(false);
initialDraw = false;
}
super.onLayout(l,t,r,b);
}
LinearLayout决定如何在onLayout()中布局它的子项(垂直或水平),而您没有调用onLayout()。更重要的是,在选择之后,它实际上开始计算如何布局每个子对象,如果子对象的可见性消失,它将跳过它(意味着子对象不会占用任何空间)。
我想在你的情况下,根本不会有孩子被摆出来展示,但我可能在某个地方错了。我怀疑你让你的生活变得不必要的困难。将视图的可扩展部分(包含少量文本视图或表格布局的非标题位)归属于单个容器视图-框架布局似乎是一种可能的选择-只需调用
setVisibility()
不需要循环,而且您肯定不想从onLayout()执行循环。。。只需从标题的
onClick()
将代码从onLayout()移动到onMeasure()即可解决问题。哇。这是一个复制粘贴错误,我确实调用super.onLayout()。这是一种方法。事实上,这会更干净一些。。有没有办法强制内容只有一个视图(即XML布局文件中只有一个子视图)?
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if(initialDraw) {
setContentsVisible(false);
initialDraw = false;
}
super.onLayout(l,t,r,b);
}