我有一个包含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>
答案 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;
}