Code Monkey home page Code Monkey logo

layoutmanager-flowlayout's Introduction

说真的自从对RecyclerViewLayoutManager有新的认识后,完全不用担心很多的复杂布局了。而且对ViewGroup测量过程也不用担心了,因为里面有LayoutManager帮我们实现了。下面就进入该篇文章的主题吧,废话不多说,直接上图更有说服力。

           

上面的示例图是我把ItemView分别用了TextViewImageView。其实这些是没什么好说的,主要是如何定义这样的LayoutManager。相信大家都用过了LinearLayoutManager吧,系统提供的LayoutManager都是对齐的方式进行排版的,我们这里的flow的样式就是在排版item之前,判断了该行多余的空间还够不够显示,如果不够直接换行显示的思路。

使用:

详见TextFlowActivityDiffHeightTextFlowActivityPhotoFlowActivity

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.flow);
FlowLayoutManager flowLayoutManager = new FlowLayoutManager();
//设置每一个item间距
recyclerView.addItemDecoration(new SpaceItemDecoration(dp2px(10)));
recyclerView.setLayoutManager(flowLayoutManager);
recyclerView.setAdapter(new FlowAdapter());

RV嵌套RV高度问题:

NestedRecyclerView recyclerView = (NestedRecyclerView) findViewById(R.id.flow);
FlowLayoutManager flowLayoutManager = new FlowLayoutManager(context);
//设置每一个item间距
recyclerView.addItemDecoration(new SpaceItemDecoration(dp2px(10)));
recyclerView.setLayoutManager(flowLayoutManager);
recyclerView.setAdapter(new FlowAdapter());

常见商品属性界面:

商品属性界面.gif

使用:见ProductActivity

常见悬浮商品属性界面:

商品属性界面.gif

使用:见SuspensionProductActivity

动画修复:

动画修复.gif

使用:见TextFlowActivity

viewpager中流式布局应用:

viewpager中流式布局.gif

使用:见ViewPagerActivity

常见长点击删除流式布局界面:

长点击删除界面.gif

  • 长点击删除图片问题

长点击显示删除图片界面.gif

使用:见LongClickDeleteTextFlowActivity

1.1版本:

修复重复操作数据问题

1.2版本:

修复重复操作数据错位以及暴露内容高度

1.3版本:

修复中间添加数据时错位问题

1.4版本:

修复动画问题

1.5版本:

添加RV嵌套RV时wrap_content不显示问题

1.6版本:

解决某些机型在wrap_content不显示问题

1.7版本:

修复清空数据滑动页面还在显示的问题

gradle依赖:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

dependencies {
        compile 'com.github.1002326270xc:LayoutManager-FlowLayout:v1.8'
}

demo第一时间体验:

欢迎大家提出问题,留言板留言或邮箱直接联系我。我会第一时间测试相关的bug

欢迎客官到本店光临(qq群):

您的鼓励就是给作者最大的支持,或是请我喝杯咖啡也行,哈哈哈~~~

关于我:

email: [email protected]

简书: http://www.jianshu.com/users/7b186b7247c1/latest_articles

csdn: http://blog.csdn.net/u010429219/article/details/64915136

layoutmanager-flowlayout's People

Contributors

xiangcman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

layoutmanager-flowlayout's Issues

自适应宽高的瀑布流

大佬 !请问下怎么实现下面这种样式的瀑布流呢?GridLayoutManager不能跨行,StaggeredGridLayoutManager又不能跨列,而且它们都需要指定列数,想了很久都没什么思路。
瀑布流

刷新闪烁

调用notifyItemChanged(position)会闪烁,已确认不是动画的原因。

FlowLayoutManager 不支持 Adapter 根布局的 layout_margin 系列属性

RV 嵌套 RV

BaseViewHolder holder = super.onCreateViewHolder(parent, viewType);
RecyclerView rc = holder.getView(R.id.rc_post);
rc.setLayoutManager(new FlowLayoutManager());
rc.addItemDecoration(new SpaceItemDecoration((int) MetricsUtil.dpToPx(4)));
rc.setAdapter(new LabelAdapter(R.layout.uum_list_item_post));
return holder;

LabelAdapter 内容就一个 TextView

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="4dp"
    android:background="@drawable/ui_rect_ecf7ff_c2"
    android:gravity="center"
    android:paddingHorizontal="4dp"
    android:paddingVertical="1dp"
    android:text="名称,超过6字省略"
    android:ellipsize="end"
    android:lines="1"
    android:maxWidth="80dp"
    android:textColor="#00A3C2"
    android:textSize="10sp" />

删除 layout_marginEnd 就正常,否则 Adapter 控件会被压缩

不能下载

Could not download LayoutManager-FlowLayout.aar (com.github.1002326270xc:LayoutManager-FlowLayout:v1.7)

不断上下滑动,布局出问题

1.设置recycleview的高度,然后不断的上下滑动,布局开始出问题,原来每个小标签的宽度都变了好大,每行只能显示一个。demo里面的也是这样的,设置recycleview的高度,也会改变

当有两个recyclerview的时候不能显示数据


<android.support.v7.widget.RecyclerView
android:id="@+id/flow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/flow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp" />

当有两个recyclerview都需要流式布局,并且把宽度设置为自适应,会有一个不能显示。

AndroidRuntime

.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.txunda.cropproduct.debug, PID: 25313
java.lang.NullPointerException: Attempt to read from field 'int android.graphics.Rect.top' on a null object reference
at com.library.flowlayout.FlowLayoutManager.formatAboveRow(FlowLayoutManager.java:234)
at com.library.flowlayout.FlowLayoutManager.onLayoutChildren(FlowLayoutManager.java:154)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3625)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3354)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3886)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1165)
at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:850)
at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2496)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2212)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

当item只有一个textview的时候,设置margin值,会把文字挤出去

像这样

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:id="@+id/tv_hint"
    android:layout_height="wrap_content"
    android:paddingStart="@dimen/dp8"
    android:paddingEnd="@dimen/dp8"
    android:paddingTop="@dimen/dp6"
    android:paddingBottom="@dimen/dp6"
    android:text="xxx"
    android:background="@drawable/shape_price_filter_bg"/>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.