在布局中我有两个视图,分别称之为视图A
和视图B
。
┌──────┐
│┌─┐┌─┐│
││A││B││
│└─┘└─┘│
└──────┘
父布局(包括视图A和视图B)的高度为“WRAP_CONTENT”。
在这里,视图B的高度为“WRAP_CONTENT”。也就是说,它的高度可以根据内容进行更改。
我想做的是:
1. 如果视图A的内容比视图B的内容短,则将视图A的高度设置为视图B的高度。 2. 如果视图A的内容比视图B的内容高,则将视图A的高度设置为其自身内容的高度。
所以,
①如果视图B的内容较高,则将视图A的高度设置为视图B的高度。
┌──────┐ ┌──────┐
│┌─┐┌─┐│ │┌─┐┌─┐│
││ ││ ││ ││A││ ││
I want ││A││B││, not │└─┘│B││.
││ ││ ││ │ │ ││
│└─┘└─┘│ │ └─┘│
└──────┘ └──────┘
② 如果视图B
的内容较短,则视图A
的高度为视图A
自身内容的高度。
┌──────┐ ┌──────┐
│┌─┐┌─┐│ │┌─┐┌─┐│
││ ││B││ ││A││B││
I want ││A│└─┘│, not │└─┘└─┘│.
││ │ │ └──────┘
│└─┘ │
└──────┘
如果父布局是
LinearLayout (Horizontal)
,将View A
的高度设置为WRAP_CONTENT
违反了情况1,将View A
的高度设置为MATCH_PARENT
违反了情况2。如果父布局是
RelativeLayout
,将View A
设置为同时与其父布局的顶部和底部对齐,会违反RelativeLayout
的条件:请注意,RelativeLayout的大小和其子项的位置之间不能存在循环依赖关系。例如,您不能将高度设置为WRAP_CONTENT的RelativeLayout和一个设置为ALIGN_PARENT_BOTTOM的子项组合在一起。
如何解决这个问题?
ViewGroup
可能是最优解。扩展LinearLayout
是一个不错的开始,根据您特定的用例,您可能只需要覆盖onMeasure()
以考虑上述标准。 - MH.android:animateLayoutChanges="true"
或在容器视图上使用了setLayoutTransition()
(也可以在这里查看这里)?如果没有这些,动态更改高度不应该真正显着。尽管如此,上述解决方案并不理想,自定义的ViewGroup
确实是解决问题的方法。如果我有时间,我会快速尝试一下。 - MH.