我有一个可以关闭自定义ScrollView
的布局。有一些片段加载到此RecycleView
中。
今天我向新片段添加了RecycleView
并发现了一个奇怪的行为。当android:height="match_parent"
有<xxx.SwitchableScrollView
android:id="@+id/main_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/fragment_holder"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ScrollViewSize"/>
</xxx.SwitchableScrollView>
时,它会在ScrollView中扩展到其高度。
有没有办法禁用它(我希望RecycleView在内部滚动并成为screen_height大小)?
主要内容xml(位于CoordinatorLayout内)
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/appeals_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/loading_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="@dimen/big_progress_diameter"
android:layout_height="@dimen/big_progress_diameter"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/custom_progress_bar_primary"/>
</LinearLayout>
</FrameLayout>
片段布局:
public class SwitchableScrollView extends ScrollView {
boolean allowScroll = true;
public boolean isAllowScroll() {
return allowScroll;
}
public void setAllowScroll(boolean allowScroll) {
this.allowScroll = allowScroll;
}
// .... constructors skipped
@Override
public boolean onTouchEvent(MotionEvent ev) {
return allowScroll && super.onTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return allowScroll && super.onInterceptTouchEvent(ev);
}
}
扩展ScrollView:
listView = (NestedRecyclerView) v.findViewById(R.id.appeals_list);
listView.setHorizontalScrollBarEnabled(false);
listView.setVerticalScrollBarEnabled(true);
listView.setNestedScrollingEnabled(true);
adapter = new AppealListAdapter(appealList);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
listView.setLayoutManager(layoutManager);
listView.setAdapter(adapter);
new GetAppeals().execute();
RecycleView init:
movieclip
我正在使用支持库23.2.1(也尝试过23.2.0)。 ListView和GridView在另一个片段中运行良好。
答案 0 :(得分:0)
最后我找到了答案。我花了6个小时(!)将这一行添加到代码中:
layoutManager.setAutoMeasureEnabled(false);
他们应该疯狂地默认启用这样的东西......