我在ScrollView中有一个RecyclerView(和其他一些视图)。目前,RecyclerView的布局非常小(它显示了它包含的5个中的2个项目)并且它独立于ScrollView滚动,这显然不是很好的用户体验。我想让RecyclerView不滚动和扩展,以便所有项目都可见。
(我知道在这种情况下使用RecyclerView是愚蠢的。我只是这样做,因为应用程序中的其他地方我需要一个普通的RecyclerView滚动等但是同样的内容,我不想要重复代码)。
答案 0 :(得分:44)
这很简单,只需将RecyclerView
的高度设置为wrap_content
。
您可能还会受益于在回收器视图上禁用嵌套滚动,如下所示:
RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler);
recycler.setNestedScrollingEnabled(false);
答案 1 :(得分:22)
setNestedScrollingEnabled(false)的解决方案并不完整:你需要使用NestedScrollView而不是ScrollViewfocusableInTouchMode =" true"到NestedScrollView的孩子。
如果你坚持使用ScrollView,你还应该将minHeight设置为RecyclerView,并设置overScrollMode =" never" 。在这种情况下,它仍然不是一个好的解决方案,因为在某些情况下minHeight可能不够
您应该考虑的其他替代解决方案:
使用单个RecyclerView替换ScrollView& RecyclerView,其中包含ScrollView中具有其他视图类型的视图
请改用GridLayout或其他布局。
答案 2 :(得分:8)
也许乍一看还不清楚如何处理所有这些答案。 我刚试过,工作的是:
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/person_properties"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
无需以编程方式进行任何更改。
答案 3 :(得分:6)
如果您在ScrollView中使用RecyclerView,则将ScrollView
替换为NestedScrollView
并启用嵌套滚动
android:nestedScrollingEnabled="false"
这解决了我的问题
答案 4 :(得分:2)
在您的activity.xml文件中
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActivityName">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/RecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false">
</androidx.recyclerview.widget.RecyclerView>
</androidx.core.widget.NestedScrollView>
在RecyclerView中,使用 android:nestedSrollingEnabled =“ false” ,并将 NestedScrollView 用作父级Scroll View。
答案 5 :(得分:1)
也尝试玩:
var sorted = logInfo.Values.OrderBy(x=>x.Size);
答案 6 :(得分:1)
以下是在回收站视图中禁用滚动并显示布局中所有项目的代码。它可能有用:
public class NoScrollRecycler extends RecyclerView {
public NoScrollRecycler(Context context){
super(context);
}
public NoScrollRecycler(Context context, AttributeSet attrs){
super(context, attrs);
}
public NoScrollRecycler(Context context, AttributeSet attrs, int style){
super(context, attrs, style);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
//Ignore scroll events.
if(ev.getAction() == MotionEvent.ACTION_MOVE)
return true;
//Dispatch event for non-scroll actions, namely clicks!
return super.dispatchTouchEvent(ev);
}
}
像这样使用:
<com.example.custom.NoScrollRecycler
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_white"/>
答案 7 :(得分:1)
一种简单的方法是在onBindViewHolder
方法内的自定义适配器中使用以下行:holder.setIsRecyclable(false);
答案 8 :(得分:1)
您应该
答案 9 :(得分:0)
我意识到我使用BottomNavigationView
阻止了回收者视图显示最后一个项目。我通过在其上添加paddingBottom
来对其进行了修复:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recipient_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="70dp"
app:layout_constraintTop_toBottomOf="@id/view"
/>
答案 10 :(得分:0)
recyclerView的父级可能是一个ConstraintLayout,将其更改为RelativeLayout