我进行了很多搜索,但是看起来是逐案的。我的情况是将RecyclerView
与CardView
一起使用,并将它们全部放入NestedScrollView
中,以便可以一次全部滚动它。
以下是屏幕截图视频: https://www.dropbox.com/s/sf3nixef6myfvh4/20190212_161401_edited.mp4?dl=0
这是我的活动布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/aImageView"/>
<android.support.v4.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/aImageView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/primaryImageView"
android:layout_width="match_parent"
android:layout_height="120dp"
android:contentDescription="@string/primaryimageview"
android:scaleType="centerCrop"
app:srcCompat="@drawable/..." />
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- many textviews, imageviews... -->
</android.support.constraint.ConstraintLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.constraint.ConstraintLayout>
而我是在活动java文件中完成的:
// card view through recycler view
RecyclerView rv = findViewById(R.id.rv);
rv.setLayoutManager(new GridLayoutManager(context, 2));
rv.setNestedScrollingEnabled(false);
rv.setHasFixedSize(true);
CardViewMainAdapter cardViewMainAdapter = new CardViewMainAdapter();
rv.setAdapter(cardViewMainAdapter);
此外,对于cardView,
<!-- see https://developer.android.com/guide/topics/ui/layout/cardview -->
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
app:cardCornerRadius="8dp"
app:cardElevation="2dp"
app:cardMaxElevation="4dp"
app:cardUseCompatPadding="true"
app:cardPreventCornerOverlap="true">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Image views, text views... -->
</android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>
一切看起来都很不错,它可以完全滚动,但是实际上,我的适配器具有6个卡视图的数据,但是回收者视图仅显示2个卡视图。 (因此,只有一行包含2列。)看起来嵌套滚动视图的整个高度就是屏幕的高度(应用栏除外)。
我确认加载此活动后,将在CardViewMainViewHolder
类内创建所有6个CardViewMainAdapter
对象。
我尝试添加app:layout_behavior="@string/appbar_scrolling_view_behavior"
,但没有帮助。
我将最外面的布局作为活动布局的线性布局,但没有用。
根据布局检查器,只有两个卡片视图(一行)。
另一个问题是...我希望在卡片视图之间将颜色变为深灰色。我试图找到背景色,但这并不容易。在iOS中,这非常容易-只需将任何合适的视图的背景色设置为该颜色即可...但是android,我不知道。 Constraintlayout
或NestedScrollView
,也没有LinearLayout
...没有任何颜色属性。怎么样?
第三个问题(因为它是相关的)是...首次显示活动时,嵌套的滚动视图已经“滚动”了。为什么?以及如何解决? scrollTo(0,0)无效。