1

我尝试在内部创建一个ListView内部。所以我使用自定义方法来制作我的NonScrollable。ScrollViewEdiTextListViewListView

我的 ListView 项目 xml 是这样的:

<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="15dp"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/title1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLines="3"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingTop="3dp"
        android:text="Text"
        android:textColor="#222"
        android:textSize="18sp"
        tools:ignore="HardcodedText" />
    <TextView
        android:id="@+id/title2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_below="@+id/title1"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingBottom="2dp"
        android:text="New Text"
        android:textColor="#727272"
        android:textSize="15sp"
        tools:ignore="HardcodedText" />


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title2"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="8dp"
        android:hint="Note"
        android:textSize="13sp"
        android:id="@+id/text_note"/>
</RelativeLayout>

自定义方法代码是这样的:

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();
    }
}

问题是当我在 EditText 中创建一个新行时,我的列表视图高度没有调整,并使我在 ListView 中的最后一个项目消失。截图是这样的:

这就是我尝试做的 前

但是结果是这样的 在此处输入图像描述

我从这里看到: Android: Listview in ScrollView with dynamic height

它说更改ListViewLinearLayout..有人可以帮我怎么做吗?我不知道如何更改ListViewLinearLayout.

如果不必更改,LinearLayout有什么办法可以调整我的高度,ListView这样我的物品就不会消失?

需要帮助来解决这个问题。

4

2 回答 2

4

尝试使用此方法:

 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);
        }

喜欢setListViewHeightBasedOnChildren(listView)

于 2015-12-01T08:18:45.583 回答
0

使用下面的类

public class ListViewUtil {
    private static final String CNAME = ListViewUtil.class.getSimpleName();

    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();
    }   
}

用于调用方法

ListViewUtil.setListViewHeightBasedOnChildren(lview);
于 2017-07-06T14:06:17.997 回答