将listview作为子项的scrollview不可滚动

时间:2017-03-03 02:12:50

标签: android

<ScrollView
    android:id="@+id/layout_guide_detail"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone">

    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="55dp"
            >
            <Button
                android:id="@+id/btn_guideTab_backButton"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/backicon_round"/>

            <TextView
                android:id="@+id/text_guideTab_detail_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:textColor="@color/color_green"
                android:text="Error"
                android:textSize="19dp" />
        </RelativeLayout>

        <ListView
            android:id="@+id/list_guideTab_detail"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"></ListView>

    </LinearLayout>
</ScrollView>

ScrollView有一个标题按钮和文本,其余用于列表视图

我想要做的是滚动整个屏幕(包括listview上方的relativeLayout) 但问题是,当我尝试滚动屏幕​​时,我只能滚动列表视图......

3 个答案:

答案 0 :(得分:0)

您有ScrollView和LinearLayout的匹配父级。 LinearLayout的高度实际上只有55dp加上ListView的高度。因此,在ScrollView中无需滚动。您可以滚动列表,因为它本身可以根据需要滚动。

你明白我的意思吗?尝试将ListView上的宽度设置为薄,然后使ScrollView的高度非常高,然后尝试它。这样,您可以触摸ScrollView的两侧以滚动ScrollView。

答案 1 :(得分:0)

不建议将ListView嵌套到ScrollView中。您可以添加头视图作为ListView的标题,当然,您可以简单地使用RecycleView。

答案 2 :(得分:0)

您仍然可以使用以下方法来使用您的滚动视图。

public static void setDynamicHeight(ListView mListView) {
    ListAdapter mListAdapter = mListView.getAdapter();
    if (mListAdapter == null) {
        // when adapter is null
        return;
    }
    int height = 0;
    int desiredWidth = View.MeasureSpec.makeMeasureSpec(mListView.getWidth(), View.MeasureSpec.UNSPECIFIED);
    for (int i = 0; i < mListAdapter.getCount(); i++) {
        View listItem = mListAdapter.getView(i, null, mListView);
        //no idea why this conditions are [no reference, just got from debug]
        if (desiredWidth == 0) {
            listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
        } else {
            listItem.measure(View.MeasureSpec.makeMeasureSpec(desiredWidth, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        }
        height += listItem.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = mListView.getLayoutParams();
    params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1));
    mListView.setLayoutParams(params);
    mListView.requestLayout();
}

最后,您只需在将数据添加到适配器后调用此函数。