Android Staggered Grdiv 查看最后一个元素全屏(如果独立)

Posted

技术标签:

【中文标题】Android Staggered Grdiv 查看最后一个元素全屏(如果独立)【英文标题】:Android Staggered Grdiv View last element full screen if standalone 【发布时间】:2020-11-12 21:33:12 【问题描述】:

我有以下带有交错网格布局管理器的回收器视图:

我想像这样调整交错网格视图的每个项目(如果它是独立的,最后一个元素全屏显示):

Main.java:

   staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    superEffectiveRecyclerView.setLayoutManager(staggeredGridLayoutManager);
    effectivenessSuperEffectiveAdapter = new EffectivenessRecyclerAdapter(this, effectivenessesSuperEffective);
    superEffectiveRecyclerView.setItemAnimator(new DefaultItemAnimator());
    superEffectiveRecyclerView.setAdapter(effectivenessSuperEffectiveAdapter);

list_item_type.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="center"
android:orientation="horizontal">

<TextView
    android:id="@+id/effectiveness_effect"
    android:layout_
    android:layout_
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:gravity="center"
    android:text="@string/placeholder"
    android:textColor="#f000"
    android:textSize="14sp" />

<TextView
    android:id="@+id/effectiveness_name"
    android:layout_
    android:layout_
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:gravity="center"
    android:text="@string/placeholder"
    android:textColor="#f000"
    android:textSize="14sp" />
    </LinearLayout>

content_main.xml:

  <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/super_efective_recycler_view"
            android:layout_
            android:layout_
            android:scrollbars="vertical"  />

我怎样才能做到这一点?

编辑:显然,设置:

     StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
    if(Objects.nonNull(layoutParams))
        if (getItemCount() % 3 == 1 && position == getItemCount() - 1) 
            layoutParams.setFullSpan(true);
        
    

在视图持有人结果:

但是,这不是我想要的,我只想要最后一个元素全屏

【问题讨论】:

要清楚,如果最后一个元素是独立的,您希望它是全屏的。对吗? @JyotishBiswas 是的,完全正确 你检查staggeredGridLayoutManager.setFullSpan(true);了吗? @hassanmoradnezhad 检查我的更新问题 【参考方案1】:

你可以试试这个

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) 
    if (size % 2 == 1 && position == size - 1) 
        StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
        layoutParams.setFullSpan(true);
    

参考Setting span size of single row in StaggeredGridLayoutManager

编辑

如果你愿意,你也可以试试 gridlayout 当您将 layoutManager 设置为 recyclerview 时设置此项 和 size = 您在适配器中传递的列表的大小

 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() 
        @Override
        public int getSpanSize(int position) 
            // 3 is the sum of items in one repeated section
            if (size%2==1&&position==size-1)
                return 1;
            else return 2;
            throw new IllegalStateException("internal error");
        
    );

【讨论】:

我从哪里得到尺寸? 这里的 size 是你在 getItemCount 中返回的值 您是否添加了此过滤器if (size % 2 == 1 &amp;&amp; position == size - 1) 那么你应该使用 Simple Gridlayout 如果你没有任何问题 让我们continue this discussion in chat.

以上是关于Android Staggered Grdiv 查看最后一个元素全屏(如果独立)的主要内容,如果未能解决你的问题,请参考以下文章

用于显示图像的颤动布局

Flutter之瀑布流效果——Flutter基础系列

android 入门 006(sqlite增删改查)

怎么查android手机序列号

android安卓数据库的增删改查和发送通知

Android-SQLiteOpenHelper里增删改查