故事
我有两个文本视图,一个在另一个上面:
XXXXXXXXXXXX[TextView1]
XXXXXXXXXXXX[TextView2]
- 两个TextView都靠右对齐。(因此上面有XXX)
- TextView1具有背景颜色。
- TextView2始终比TextView1长。
- TextView1的左侧必须与TextView2对齐。
我有以上4个要求。使用ConstraintLayout可以很好地实现,其中TextView1的左侧被约束到TextView2的左侧,而TextView2的宽度为wrap_content
。
但是现在出现了第五个要求:
- TextView2可以消失,只留下TextView1。
setVisibility(GONE)
不起作用,因为TextView2必须是wrap_content
。它的宽度将变为0,因此TextView1也会消失(因为它的左侧被约束到TextView2的左侧)。
然后我尝试使用以下代码将TextView2的高度设置为0:
ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams)textView2.getLayoutParams();
lp.width = widthInPixelOrConstant;
textView2.setLayoutParams(lp);
哎呀,什么都没有发生。TextView2还在那里,好像什么也没发生过。
我谷歌了半个小时,最终决定用LinearLayout
来包装TextView2。
然后使用以下代码将TextView2的高度设置为0:
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams )view.getLayoutParams();
lp.width = widthInPixelOrConstant;
view.setLayoutParams(lp);
......它可行!!!
问题
显然,我们不能再像以前那样使用setLayoutParams
来尝试在运行时更改ConstraintLayout子项的高度或宽度。
但是,将TextView2包装在LinearLayout中真的很愚蠢。
有人知道如何在运行时更改ConstraintLayout子项的宽度或高度吗?