如何调整Recyclerview中的项目,使其只填充一页

时间:2017-06-04 00:51:04

标签: android android-layout android-recyclerview

我有一个包含3种不同项目类型的RecyclerView(由于课程练习要求,我需要使用RecyclerView,而不是不同的视图)。结果是一个布局,顶部是ExoplayerView(item_player.xml),中间是item_step_description.xml,之后是item_navigation.xml代码和图片,如下所示。

我想要一个RecyclerView布局,item_player继续占据前200dp,item_navigation对齐页面底部,这两个视图之间的所有剩余空间都被{占用{1}}。

如果我在同一个布局中使用三组视图,那么使用LinearLayout作为父级并使用item_step_description调整子级将很容易实现。但是我无法在RecyclerView中实现这个结果。

layout_weight
: recycler_view_layout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context="com.github.alexpfx.udacity.nanodegree.android.baking_app.step.detail.StepViewFragment">

    <!-- TODO: Update blank fragment layout -->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_step_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </android.support.v7.widget.RecyclerView>

</FrameLayout>
: item_player.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="200dp"
              android:orientation="vertical"

    >

    <com.google.android.exoplayer2.ui.SimpleExoPlayerView
        android:id="@+id/video_player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>
: item_step_description.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="#1ab"
              android:orientation="vertical"
    >

    <TextView
        android:id="@+id/text_step_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="detail step"/>
</LinearLayout>

The result of above layout

The result I expect

1 个答案:

答案 0 :(得分:1)

您可以通过在ViewHolder构造函数中设置每种视图类型的高度来存档它,如下所示:

 //your player height
 public ViewHolderPlayer(View itemView) {
        super(itemView);
        itemView.getLayoutParams().height = your200dpHeight;
    }
// your instruction 
 public ViewHolderPlayerInstruction(View itemView) {
        super(itemView);
        itemView.getLayoutParams().height = (screenHeight - your200dpHeight)*3f/4f;
    }