【问题标题】:Change LinearLayout height to 0 programmatically以编程方式将 LinearLayout 高度更改为 0
【发布时间】:2015-09-14 19:13:28
【问题描述】:

我将 LinearLayout 从原来的高度重新调整为 0

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

除了newHeight = 0 之外的一切都有效 - 布局的高度变回原来的高度。我该如何避免呢?

如果newHeight == 0 不起作用,则将可见性设置为GONE

【问题讨论】:

  • 你为什么把它改成0?你想隐藏它吗?
  • 我正在调整它的大小以处理拖放行为。用户在项目下方滑动并在布局上方隐藏。
  • params.height = 0?否则,view.GONE 是隐藏东西的好方法。
  • 我这样做了,布局的内容不可见,但是高度会恢复到原始值,所以我有 40dp 的空白空间。
  • setVisibility(View.INVISIBLE) ?

标签: android android-layout


【解决方案1】:

试试这个.....

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

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

【讨论】:

  • 使用 id 指定视图效果很好,它可以设置0 高度。谢谢!
  • 而且,如果我必须将其设置为“match_parent”,那该怎么做呢?
  • lp.height = LayoutParams.MATCH_PARENT;
【解决方案2】:
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);

【讨论】:

  • 请添加说明如何解决用户问题。另外,请阅读How to Answer
【解决方案3】:

您不是必须使用setBaseAttributes() 设置params 的高度吗? int height = ... 不会对params 产生任何影响...

【讨论】:

  • 啊,我已经编辑了我的代码 - 它应该是 params.height = newHeight。对不起。但是问题仍然存在。
【解决方案4】:

你确定你得到的是实际参数对象,而不是一个副本吗? 我会尝试以下代码:

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

【讨论】:

  • 如果你requestLayout,你可以修改getLayoutParams的参数。否则你必须setLayoutParams。对于除0 以外的所有值,它都运行良好。
【解决方案5】:

然后尝试设置一个新的布局参数对象。这应该工作

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

【讨论】:

  • 它还设置了原始高度。如果我设置1 而不是0 - 高度会很好地更改为1
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 2023-01-17
  • 2014-09-30
  • 2014-11-21
  • 2014-01-22
  • 2017-04-25
  • 2014-07-05
  • 1970-01-01
相关资源
最近更新 更多