将LinearLayout的高度以编程方式更改为0

5

我正在使用以下代码将LinearLayout从其原始高度调整为0

ViewGroup.LayoutParams params = getLayoutParams();
params.height = newHeight;
requestLayout();

除了 newHeight = 0 之外,一切正常 - 布局的高度会改回其原始高度。我该如何避免这种情况?如果 newHeight == 0,把可见性设置为 GONE 也无济于事。

为什么你把它的大小调整为0?你想隐藏它吗? - Ovidiu Latcu
我正在调整大小以处理拖放行为。用户将项目滑动到下方并隐藏在布局上方。 - hsz
1
params.height = 0吗?否则,view.GONE是一个不错的隐藏元素的方式。 - njzk2
我已经这样做了,布局的内容不可见,但高度会返回到原始值,因此我有40dp的空白空间。 - hsz
setVisibility(View.INVISIBLE) 的意思是设置视图不可见。 - Balázs Édes
显示剩余2条评论
5个回答

13

尝试这样做...

 LinearLayout layout = (LinearLayout)findViewById(R.id.yourLayoutId);

 LinearLayout.LayoutParams lp = (LayoutParams) layout.getLayoutParams();
 lp.height = 0;

指定具有ID的视图效果很好,可以设置0高度。谢谢! - hsz
如果我必须将其设置为"match_parent",那么应该如何操作? - Kaveesh Kanwal
lp.height = LayoutParams.MATCH_PARENT;lp.height = LayoutParams.MATCH_PARENT; - Mehul Santoki

3
layout = (LinearLayout)findViewById(R.id.linearTop);

layout.getLayoutParams().height =  ViewGroup.LayoutParams.WRAP_CONTENT;                
ViewGroup.LayoutParams params =    layout.getLayoutParams();
params.height =  ViewGroup.LayoutParams.WRAP_CONTENT;
layout.setLayoutParams(params);

请添加解释如何解决用户问题的描述。另外,请阅读 如何回答 - Roman Marusyk

0

你确定你获取的是实际参数对象,而不是其副本吗? 我建议尝试以下代码:

ViewGroup.LayoutParams params = getLayoutParams();
params.height = newHeight;
setLayoutParams(params);
requestLayout();

如果您使用requestLayout,则可以修改getLayoutParams中的参数。否则,您必须使用setLayoutParams。对于除0以外的任何其他值,它都能正常工作。 - hsz

0

尝试设置一个新的布局参数对象。这应该可以解决问题。

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,0);
layout.setLayoutParams(lp);

1
它还设置了原始高度。如果我将0改为1 - 高度会成功更改为1 - hsz

0

你不需要使用setBaseAttributes()来设置params的高度吗?int height = ...params没有任何影响...


啊,我已经编辑了我的代码 - 应该是 params.height = newHeight。抱歉。然而问题仍然存在。 - hsz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接