Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将listview作为子级的scrollview不可滚动_Android - Fatal编程技术网

Android 将listview作为子级的scrollview不可滚动

Android 将listview作为子级的scrollview不可滚动,android,Android,ScrollView有一个按钮和文本作为标题,其余的用于listview 我想做的是滚动整个屏幕(包括listview上方的relativeLayout) 但问题是,当我尝试滚动屏幕时,我只能滚动listview…您有ScrollView和LinearLayout的匹配父项。LinearLayout的高度实际上只有55dp加上ListView的高度。所以在ScrollView中没有什么可滚动的。您可以滚动列表,因为它本身可以根据需要滚动到最深的位置 你明白我的意思吗?尝试将ListView上的宽

ScrollView有一个按钮和文本作为标题,其余的用于listview

我想做的是滚动整个屏幕(包括listview上方的relativeLayout)
但问题是,当我尝试滚动屏幕时,我只能滚动listview…

您有ScrollView和LinearLayout的匹配父项。LinearLayout的高度实际上只有55dp加上ListView的高度。所以在ScrollView中没有什么可滚动的。您可以滚动列表,因为它本身可以根据需要滚动到最深的位置


你明白我的意思吗?尝试将ListView上的宽度设置为较薄的值,然后将ScrollView的高度设置为较高,然后再试一次。这样,您可以触摸ScrollView的侧面以滚动ScrollView。

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

您仍然可以使用以下方法使用scrollview

<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>
publicstaticvoidsetdynamicheight(ListView-mListView){
ListAdapter mListAdapter=mListView.getAdapter();
if(mListAdapter==null){
//当适配器为空时
返回;
}
整数高度=0;
int desiredWidth=View.MeasureSpec.makeMeasureSpec(mListView.getWidth(),View.MeasureSpec.UNSPECIFIED);
对于(int i=0;i

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

使用
RecyclerView
wrap\u content
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();
}