代码之家  ›  专栏  ›  技术社区  ›  Alireza Noorali

显示具有自定义排列的RecyclerView列表项[重复]

  •  1
  • Alireza Noorali  · 技术社区  · 5 年前

    我想把一些数据填入 RecyclerView GridLayoutManager 以下内容:

    GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
    

    这将把数据从 从左到右 是的。第一项将放在左上角等处。

    但我正在开发的应用程序是为rtl语言设计的,所以我需要从 从右向左 是的。

    我试图把最后一个论点改成 true 是的。但它只是滚动 回收服务 一路下来。

    同时设置 layoutDirection 属性 回收服务 不起作用(不考虑我的最小API是16,并且此属性是为API17+添加的):

    <android.support.v7.widget.RecyclerView
            android:id="@+id/grid"
            android:layoutDirection="rtl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    

    如何使用 回收服务 是吗?

    0 回复  |  直到 9 年前
        1
  •  66
  •   Praful Bhatnagar    8 年前

    创建扩展的类 GridLayoutMAnager ,并重写 isLayoutRTL() 方法如下:

    public class RtlGridLayoutManager extends GridLayoutManager {
    
        public RtlGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        public RtlGridLayoutManager(Context context, int spanCount) {
            super(context, spanCount);
        }
    
        public RtlGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
            super(context, spanCount, orientation, reverseLayout);
        }
    
        @Override
        protected boolean isLayoutRTL(){
            return true;
        }
    }
    
        2
  •  4
  •   Emad Razavi Berkay92    6 年前

    穆罕默德的答案是正确的,但你不需要创建一个新的类。您可以简单地重写islayourtl方法。

    GridLayoutManager lm = new GridLayoutManager(this, 2) {
        @Override
        protected boolean isLayoutRTL() {
            return true;
        }
    };
    
        3
  •  3
  •   Burhanuddin Rashid Abdilahi    6 年前

    有更好的办法

    您可以通过编程更改RecycleView的布局方向

    workHourRecycler = view.findViewById(R.id.market_hours_recycler);
    workHourRecycler.setLayoutManager(new GridLayoutManager(getContext(),4));
    
    //Programtically set the direction
    workHourRecycler.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    
        4
  •  1
  •   Praful Bhatnagar    8 年前

    从表面上看,gridlayoumanager应该 fill rows from right 什么时候 getLayoutDirection() 给予 ViewCompat.LAYOUT_DIRECTION_RTL 是的。通常,此方向将继承自 RecyclerView's 集装箱。

    但如果这不能按预期工作,或者您需要将其推送到API16,或者您的某个设备的RTL支持实现不好,您可以简单地 GridLayoutManager 从github,并使用自定义管理器,您可以根据自己的喜好进行调整。

    可能足以延长库存 网格布局管理器 和覆盖 layoutChunk() 是的。

        5
  •  -5
  •   Eltaf Hussain    8 年前

    它非常简单,只需调用方法 setReverseLayout 作为,

    GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
    layoutManager.setReverseLayout(true);