Android RecyclerView水平包裹内容最大尺寸
我有一个RecyclerView(下图)和一些从API加载的内容(图片和文本)。我希望所有行的高度完全相同,但是文本的长度可能会有很大的差异。因此,黄色框应该更大,以匹配包含更多文本的绿色框。这有意义吗 目前,我使用的是设置为水平的LinearLayoutManager,但我还使用了一个具有1行的GridLayoutManager进行了测试,这会产生相同的效果 我还使用setAutoMeasureEnabled设置为trueAndroid RecyclerView水平包裹内容最大尺寸,android,android-recyclerview,Android,Android Recyclerview,我有一个RecyclerView(下图)和一些从API加载的内容(图片和文本)。我希望所有行的高度完全相同,但是文本的长度可能会有很大的差异。因此,黄色框应该更大,以匹配包含更多文本的绿色框。这有意义吗 目前,我使用的是设置为水平的LinearLayoutManager,但我还使用了一个具有1行的GridLayoutManager进行了测试,这会产生相同的效果 我还使用setAutoMeasureEnabled设置为true 有没有一种简单的方法可以通过RecyclerView实现这一点 如果
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
mLayoutManager = new GridLayoutManager(MainActivity.this, 1, GridLayoutManager.HORIZONTAL, false);
mLayoutManager.setAutoMeasureEnabled(true);
mRecyclerView.setLayoutManager(mLayoutManager);
setUpSomeData();
TopFilmsCard card1 = (TopFilmsCard)cards.get(0);
mAdapter = new FilmsAdapter(card1.getFilms());
mRecyclerView.setAdapter(mAdapter);
电影摄影师
private class FilmsAdapter
extends RecyclerView.Adapter<FilmsCardHolder> {
private List<Film> films;
public FilmsAdapter(List<Film> films) {
this.films = films;
}
@Override
public int getItemViewType(int position) {
return R.layout.holder_top_films;
}
@Override
public FilmsCardHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new FilmsCardHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.holder_film, parent, false));
}
@Override
public void onBindViewHolder(FilmsCardHolder holder, int position) {
holder.bindCard(films.get(position));
}
@Override
public int getItemCount() {
return films.size();
}
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#CCD1D9"/>
胶卷
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutFilm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#5D9CEC">
<TextView
android:id="@+id/lblFilmName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:padding="10dp"
android:textSize="22sp"/>
<ImageView
android:id="@+id/imgPicture"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
/>
共享您的viewholder xml文件,以及您与初始化和设置AdapterPleaseEded相关的代码,很多代码与中所述完全相同-感谢您让holder高度与父级和recyclerview高度包裹内容匹配。那可能work@howdoidothis在这种情况下,它将覆盖整个屏幕。这是一个有点不寻常的情况。在绑定过程中,您可以在适配器的变量中存储(到目前为止)行的最大值,并且每当您面对一个包含更多行的
TextView
时,您可以notifyDataSetChanged
并在其TextView
中用额外的空行重新绘制前面的项目(根据此变量)。这不是很有效,但可能符合您需要的逻辑。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutFilm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#5D9CEC">
<TextView
android:id="@+id/lblFilmName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:padding="10dp"
android:textSize="22sp"/>
<ImageView
android:id="@+id/imgPicture"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
/>