为什么ListView项目不能增长以包装其内容?
我有一个相当复杂的ListView,具有可变列表项高度。 在某些情况下,我需要在列表项中显示一个额外的视图,默认情况下隐藏(View.GONE)。 通过启用它(View.VISIBLE),列表项的高度增加(或至少应该是)。
问题:即使我将项目的根布局声明为wrap_content,并将项目中的每个组件都填充为fill_parent,但我隐藏/显示应该更改项目高度的视图在底部而不是其父项(项目布局)高度增长,以充分显示它。
是否有任何与ListView相关的细节以及我可能错过的项目布局和项目高度?
还有一些观察:
出于测试目的,我现在已经减少了列表项目布局,以包含根LinearLayout和ImageView。 当我将LinearLayout高度设置为例如200dip并将ImageView设置为fill_parent时,我预计ImageView会增长,直到达到其父级设置的200dip限制。
然而,图像只会与其位图资源一样高(如果我已将其设置为wrap_content),并且整个列表项将具有相同的高度(即,如果我也将它设置为wrap_content)。
但是,如果我将图像高度设置为例如200dip,则列表项目的高度将增加,项目布局也会增加。
换句话说,列表项布局的layout_height完全被忽略,ImageView上的任何高度值都不是硬编码的像素值。
我设法解决这个问题,但我不明白为什么。
正如我所提到的,我将列表项布局的layout_height
设置为wrap_content
(因为fill_parent
在这里没有意义,因为ListView无限高)。
不过,我已将layout中所有视图的layout_height
设置为fill_parent
。 问题在设置为wrap_content
时消失。
这引发了另外两个问题:
1)什么是视图要求fill_parent
时的语义,当父类wraps_content
? 哪个大小的请求优先?
2)如果fill_parent
显然不起作用,我将如何使视图填充列表项目?
感谢您的输入人。
试试这个:http://www.java2s.com/Code/Android/UI/setListViewHeightBasedOnChildren.htm
public class Utils {
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
}
你怎么膨胀你的行?
如果你不使用它的权利,请尝试使用LayoutInflater#inflate(layoutId, parent, false)
(其中parent
是AdapterView
提供给getView()
或newView()
v = getLayoutInflater().inflate(R.layout.list_item, parent, false);
链接地址: http://www.djcxy.com/p/93235.html