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