为在 android 中以编程方式添加的列表视图设置动态高度
Set dynamic height for list view which is added programatically in android
请不要在没有理解的情况下将此问题标记为重复。
我已经完成了所有可用的答案,但 none 能够解决我的问题。
场景: 我必须添加具有点击展开和折叠功能的部分,这些部分根据 API 响应是动态的。所以我采用了具有以下树结构的 xml 文件。
main.xml
LinearLayout->ScrollView->LinearLayout
现在我根据响应在此线性布局中添加自定义 xml 设计文件,此响应还包含每个部分中的问题数量。
因此,为了管理问题,我在自定义 xml 文件中采用了列表视图。现在我必须以全高显示每个列表视图,所以只有顶部滚动应该工作,没有任何类型的内部滚动。
我已经用通用方法名称 setListViewHeightBasedOnChildren 检查了一些答案,但它不起作用,因为列表视图是动态添加的 运行 时间。
所以请帮助我。
由于子列表的数量是动态的,你最好去图书馆
您只需要再添加一个适配器来维护子列表。它也很容易定制。
我已经这样做了,试试这个:
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
请不要在没有理解的情况下将此问题标记为重复。
我已经完成了所有可用的答案,但 none 能够解决我的问题。
场景: 我必须添加具有点击展开和折叠功能的部分,这些部分根据 API 响应是动态的。所以我采用了具有以下树结构的 xml 文件。
main.xml
LinearLayout->ScrollView->LinearLayout
现在我根据响应在此线性布局中添加自定义 xml 设计文件,此响应还包含每个部分中的问题数量。 因此,为了管理问题,我在自定义 xml 文件中采用了列表视图。现在我必须以全高显示每个列表视图,所以只有顶部滚动应该工作,没有任何类型的内部滚动。
我已经用通用方法名称 setListViewHeightBasedOnChildren 检查了一些答案,但它不起作用,因为列表视图是动态添加的 运行 时间。
所以请帮助我。
由于子列表的数量是动态的,你最好去图书馆
您只需要再添加一个适配器来维护子列表。它也很容易定制。
我已经这样做了,试试这个:
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}