我在ScrollView中有一个ListView。
如何设置ListView的高度,使其适配器中的所有项目都适合它,并且不需要滚动。
答案 0 :(得分:8)
如果您想要一个不滚动的项目列表,则称其为线性布局。
如果您愿意,可以自定义listview:
public class NonScrollListView extends ListView {
public NonScrollListView(Context context) {
super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
}
答案 1 :(得分:1)
你可以使用这样的东西,它会扩展列表,所以它不需要滚动。只需记住使用ScrollView将其包装在XML中:
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
和班级:
public class ExpandedListView extends ListView {
private android.view.ViewGroup.LayoutParams params;
private int old_count = 0;
public ExpandedListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
if (getCount() != old_count) {
old_count = getCount();
params = getLayoutParams();
params.height = getCount() * (old_count > 0 ? getChildAt(0).getHeight() : 0);
setLayoutParams(params);
}
super.onDraw(canvas);
}
}
您也可以参考这个有用的问题: Calculate the size of a list view or how to tell it to fully expand
答案 2 :(得分:0)
如果您使用的是ScrollView,如果它的高度大于屏幕大小,它将滚动。无论如何,尝试使用下面的参数来查看它是否符合您的要求。
机器人:layout_height =&#34; WRAP_CONTENT&#34;