【问题标题】:Recyclerview: Make the first viewholder item start with a little space from the topRecyclerview:让第一个viewholder项从顶部开始有一点空间
【发布时间】:2016-03-25 09:18:20
【问题描述】:

希望这张图片能解释一下我想要做什么。 请记住,textview 和 recyclerview 都是 FRAMELAYOUT 的 ViewGroup。

我想要一个match_parentFRAMELAYOUT 的回收站视图。显示单词“Places”的textview 必须位于recyclerview 的顶部。您无法从图像中看到它,但 textviewalpha 为 0.5,因此它是半透明的。

我想做的是让recyclerview viewholders,也就是你在图片中看到的深绿色项目,从textview的高度下方一点点开始。这样,当用户滚动recyclerview时,项目将在半透明textview下优雅地滚动。

有没有办法确保recyclerview中的第一项从recyclerview的顶部开始一点点(即textview的高度),这样才能达到这个效果?

【问题讨论】:

    标签: android android-recyclerview android-framelayout


    【解决方案1】:

    你可以试试!! android:clipToPadding="false"

    如果 padding 不为零,则定义 ViewGroup 是否将剪切其子项并将任何 EdgeEffect 的大小调整(但不剪切)到它的 padding。此属性默认设置为 true。

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:clipToPadding="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    

    【讨论】:

      【解决方案2】:

      仅对第一个项目尝试项目装饰。

      public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {
      
          private final int mVerticalSpaceHeight;
      
          public VerticalSpaceItemDecoration(int mVerticalSpaceHeight) {
              this.mVerticalSpaceHeight = mVerticalSpaceHeight;
          }
      
          @Override
          public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
                  RecyclerView.State state) {
              if (parent.getChildAdapterPosition(view) == 1) {
                  outRect.top = mVerticalSpaceHeight;
              }
          }
      }
      

      用法

      RecycleView recyclerView = (RecyclerView) rootView.findViewById(R.id.fragment_home_recycler_view);
      LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(getActivity());
      recyclerView.setLayoutManager(mLinearLayoutManager);
      
      //add ItemDecoration
      recyclerView.addItemDecoration(new VerticalSpaceItemDecoration(TOP_ITEM_SPACE));
      

      希望这会有所帮助。

      【讨论】:

      • 这是一个有趣的建议。我稍后会试试这个。
      【解决方案3】:

      只需创建一个与 TextView 高度相同的布局,如

      布局/header.xml

      <View xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="@dimen/recyclerViewWidth"
          android:layout_height="@dimen/yourTextViewHeight"
          android:background="@android:color/transparent" />
      

      将此布局用作 RecyclerView 的标题。

      希望这能解决您的问题。

      编辑

      我以为你的布局是这样的

      <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/recyclerView"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
          <TextView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="@android:color/black"
              android:alpha="0.8"
              android:text="@string/action_switch"
              android:textColor="@android:color/white" />
      
      </FrameLayout>
      

      如果是这种情况,使用'layout/header.xml'(我在上面指定)作为标题将解决问题。因为第一项标题是不可见的,因为它是透明的。滚动第二个项目会向上看起来就像在 TextView 后面移动。

      编辑 2:

      您也可以使用其他方式。在 RecyclerView 的项目布局中包含 layout/header.xml'。作为

      <Layout ><!-- your item's layout -->
          <include layout="@layout/panel_icon_item"
                  android:id="@+id/marginTopView"
                  android:layout_width="match_parent"
                  android:layout_height="@dimen/yourTextViewHight"/>
          <!-- your layout code -->
      </Layout>
      

      getViewRecyclerView setVibility(true) 如果是第 1 项,否则 setVibility(false)

      【讨论】:

      • 不,不会的。请记住,视图组是一个框架布局。如果我按照您的建议进行操作,recyclerview 将不会在 textview 下滚动 - 我无法在半透明 textview 下看到 recyclerview。
      • 您的解决方案会起作用,但问题是我将在我的 recyclerview 中创建一个假的第一个项目,当您的 recyclerview 总是在变化时变得难以管理,用户将项目添加到顶部,正在删除的项目等。
      • 好的,这很酷。我认为 Sachet Bajracharya 先生的解决方案会有所帮助。
      猜你喜欢
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 2023-04-07
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      相关资源
      最近更新 更多