Android 水平回收视图跟随第一个项目高度和包裹内容
我有一个水平布局的Android 水平回收视图跟随第一个项目高度和包裹内容,android,android-recyclerview,Android,Android Recyclerview,我有一个水平布局的RecyclerView。各个适配器项的高度可能取决于项的内容 因此,理论上它可以如下所示: 我现在的问题是,它似乎只关心第一个问题的高度,因为我得到的结果如下所示: 你可以看到,第四项被切断。然而,如果我把最高的项目放在第一位,它就完美地工作了 并摆脱显而易见的解决方案;我不知道这些东西的高度。我只能在测试时这样做 -- adapter_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo
RecyclerView
。各个适配器项的高度可能取决于项的内容
因此,理论上它可以如下所示:
我现在的问题是,它似乎只关心第一个问题的高度,因为我得到的结果如下所示:
你可以看到,第四项被切断。然而,如果我把最高的项目放在第一位,它就完美地工作了
并摆脱显而易见的解决方案;我不知道这些东西的高度。我只能在测试时这样做
--
adapter_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:animateLayoutChanges="true"
android:padding="@dimen/padding_view_small">
<ImageView
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
app:srcCompat="@drawable/flamme"/>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:layout_marginTop="@dimen/padding_view_small"
android:text="@string/placeholder"
android:gravity="center_horizontal"/>
</LinearLayout>
将imageview高度更改为包裹内容。我不确定,就这样试试。试试这个。不管怎样,你的问题解决了吗
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
final int newHeight = recyclerView.getMeasuredHeight();
if (0 != newHeight && minHeight < newHeight) {
// keep track the height and prevent recycler view optimizing by resizing
minHeight = newHeight;
recyclerView.setMinimumHeight(minHeight);
}
}
});
mRecyclerView.addOnScrollListener(新的RecyclerView.OnScrollListener(){
@凌驾
CrollStateChanged上的公共void(@NonNull RecyclerView RecyclerView,int newState){
super.onScrollStateChanged(recyclerView、newState);
final int newHeight=recyclerView.getMeasuredHeight();
如果(0!=newHeight&&minHeight
由于这个问题越来越吸引人,而且我只在评论中发布了我的个人解决方案,所以我也将提交一个答案
--
我决定利用图书馆来达到我的目的。它非常可定制,我建议尝试解决类似问题的人使用它。使用
StaggedGridLayoutManager
我决定使用谷歌FlexBox的FlexboxLayoutManager来均匀显示所有项目。在使用它之后,我想最好是让所有项目同时显示,而不是滚动显示。尝试删除setHasFixedSize属性,我也面临同样的问题,然后我删除了此属性。
...
final ProductPictogramAdapter symbolAdapter = new ProductPictogramAdapter();
final View symbolListParent = findViewById(R.id.symbol_list_parent);
RecyclerView symbolList = findViewById(R.id.symbol_list);
symbolList.setLayoutManager(new LinearLayoutManager(ProductDetailActivity.this, LinearLayoutManager.HORIZONTAL, false));
symbolList.setAdapter(symbolAdapter);
symbolList.setHasFixedSize(true);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
final int newHeight = recyclerView.getMeasuredHeight();
if (0 != newHeight && minHeight < newHeight) {
// keep track the height and prevent recycler view optimizing by resizing
minHeight = newHeight;
recyclerView.setMinimumHeight(minHeight);
}
}
});