我遇到这个问题,我有一个 相对布局 ,它有两个子相对布局(leftpanel和rightpanel)。它们位于listview项目的自定义布局中,每个项目都是从服务器的json响应中更新的。所以大小取决于服务器提供的内容。
问题:我希望每个面板的高度相互匹配,但似乎将 layout_height设置为match_parent不起作用 (实际上,如果这可以解决,那么没有更多的问题)。
我做了什么:我以编程方式将每个面板的顶部和底部对齐 - 如果另一个面板更大,则调整另一个面板,反之亦然。所以我做的是有一个视图(右侧面板)来监听rightPanel.getViewTreeObserver()。addOnScrollChangedListener(),并在每次滚动更改时调用下面的方法:
private void updateLayoutAlignmentParams(ViewHolder viewHolder) {
RelativeLayout.LayoutParams leftPanelLayoutParams = (RelativeLayout.LayoutParams)viewHolder.leftPanel.getLayoutParams();
RelativeLayout.LayoutParams rightPanelLayoutParams = (RelativeLayout.LayoutParams)viewHolder.rightPanel.getLayoutParams();
int leftPanelHeight = viewHolder.leftPanel.getHeight();
int rightPanelHeight = viewHolder.rightPanel.getHeight();
if(leftPanelHeight > rightPanelHeight) {
rightPanelLayoutParams.addRule(RelativeLayout.ALIGN_BOTTOM, 0);
rightPanelLayoutParams.addRule(RelativeLayout.ALIGN_TOP, 0);
leftPanelLayoutParams.addRule(RelativeLayout.ALIGN_BOTTOM, viewHolder.rightPanel.getId());
leftPanelLayoutParams.addRule(RelativeLayout.ALIGN_TOP, viewHolder.rightPanel.getId());
} else {
leftPanelLayoutParams.addRule(RelativeLayout.ALIGN_BOTTOM, 0);
leftPanelLayoutParams.addRule(RelativeLayout.ALIGN_TOP, 0);
rightPanelLayoutParams.addRule(RelativeLayout.ALIGN_BOTTOM, viewHolder.leftPanel.getId());
rightPanelLayoutParams.addRule(RelativeLayout.ALIGN_TOP, viewHolder.leftPanel.getId());
}
}
会发生什么:滚动时并非所有视图都会更新;所以我得到一个单边的listview项目,其中一个比另一个更大,但有些调整得很好。奇怪的是,当物品离开视线时,它是偏斜的,然后得到一致的纠正。
注意:我也试过
如果你知道为什么或有更好的解决方案,请告诉我。
答案 0 :(得分:1)
最后[kindof]修复了它!用以下代码替换整个方法:
private void updateLayoutAlignmentParams(ViewHolder viewHolder) {
viewHolder.rightPanel.setMinimumHeight(viewHolder.leftPanel.getHeight());
viewHolder.leftPanel.setMinimumHeight(viewHolder.rightPanel.getHeight());
}
虽然,我能够使用上面的代码实现左右面板彼此对齐。我现在遇到的问题是,当我切换视图时,前一个视图的高度和宽度会保留。 :(
修改强> 好的,我最终使用LinearLayout来包装整个listview项目。但是,不确定为什么RelativeLayout不符合match_parent。