我有一个相当复杂的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上的任何高度值也是如此.
Mat*_*ias 56
我设法解决了这个问题,但我不明白为什么.
正如我所提到的,我已经将layout_height列表项布局设置为wrap_content(因为这fill_parent是无意义的,因为ListView是无限高的).
不过,我已经设置layout_height的所有视图内该布局fill_parent.将它们设置为wrap_content相反时,问题就消失了.
这提出了另外两个问题:
1)一个视图的语义是什么fill_parent,当父母wraps_content?哪个尺寸请求优先?
2)如果fill_parent显然不起作用,我将如何填写列表项?
谢谢你输入的人.
小智 30
试试这个: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();
}
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 21
你是如何给行充气的?
如果你不使用它的权利,请尝试使用LayoutInflater#inflate(layoutId, parent, false)(这里parent是AdapterView提供给getView()或newView()):
v = getLayoutInflater().inflate(R.layout.list_item, parent, false);
Run Code Online (Sandbox Code Playgroud)
kir*_*off 14
布局问题可能是由ScrollView作为包装器引起的
我偶然发现了http://developer.android.com/reference/android/widget/ExpandableListView.html中的一些注意事项.
"...注意:如果父级的大小也没有严格指定,则不能将值wrap_content用于XML中ExpandableListView的android:layout_height属性(例如,如果父级是ScrollView,则无法指定wrap_content,因为它也可以任何长度.但是,如果ExpandableListView父级具有特定大小(例如100像素),则可以使用wrap_content."
我删除了包装ScrollView和线性布局开始正常工作.现在只知道如何将东西包装到ScrollView.神救救我
但无论如何这是非常奇怪的行为.我认为fill_parent的措辞不是很正确.使用heirarchyviewer工具时,我总是看到layout_width和leayout_height的WRAP_CONTENT和MATCH_PARENT值.所以fill_parent实际上可能意味着match_parent,它让我陷入认知失调.
| 归档时间: |
|
| 查看次数: |
68280 次 |
| 最近记录: |