这种布局管理器可以代表谷歌的芯片材料的设计模式
作为一个android开发人员,我看到google不是很有礼貌支持我们的所有愿望,当我面对这样的常见任务,如创建spannable列表,但与CRUD动画的支持,我决定做这样的东西,并分享它。
与gradle
compile 'com.beloo.widget:ChipsLayoutManager:0.3.7@aar'
假设您已安装jCenter提供程序:
allprojects {
repositories {
jcenter()
}
}
或者只是导入ChipsLayoutManager
模块项目。
布局管理器代表的芯片或列表项跨区或“泡沫”的结构,是一个很好的替换根据跨度等问题的典型实现TextView
或自定义FlowLayout
秒。
RecyclerView
的/ LayoutManager
的功能,例如默认的动画,同时CRUD物品及定制ItemAnimator
S,ItemDecorator
为s,滚动等wrap_content
的高度支持RecyclerView
TextView
的方法)插入/删除 | 移动 |
---|---|
![]() |
![]() |
左到右 | 右到左 | |
---|---|---|
水平 |
![]() |
![]() |
垂直 |
![]() |
任何行都有一些空间,其中不可能放置下一个视图,因为该空间太小。但是我们可以分配该行的可用视图的空间。
行策略是一种分布左空间的模式。
STRATEGY_DEFAULT
- 默认使用。左空格放置在行的末尾。STRATEGY_FILL_VIEW
- 可用空间分布在视图中。STRATEGY_FILL_SPACE
- 可用空间分布在视图之间的空间中,开始和结束视图停靠到最近的边界。STRATEGY_CENTER
- 可用空间分布在视图之间的空间中,包括开始和结束空间。视图位于画布的中心。STRATEGY_CENTER_DENSE
- 视图放在画布的中心。视图之间没有额外的空间分布。在这种布局中,默认最后一行不认为已完成。所以策略不适用于最后一行。但是你也可以启用相反的行为。
ChipsLayoutManager chipsLayoutManager = ChipsLayoutManager.newBuilder()
//set vertical gravity for all items in a row. Default = Gravity.CENTER_VERTICAL
.setChildGravity(Gravity.TOP)
//whether RecyclerView can scroll. TRUE by default
.setScrollingEnabled(true)
//set maximum views count in a particular row
.setMaxViewsInRow(2)
//set gravity resolver where you can determine gravity for item in position.
//This method have priority over previous one
.setGravityResolver(new IChildGravityResolver() {
@Override
public int getItemGravity(int position) {
return Gravity.CENTER;
}
})
//you are able to break row due to your conditions. Row breaker should return true for that views
.setRowBreaker(new IRowBreaker() {
@Override
public boolean isItemBreakRow(@IntRange(from = 0) int position) {
return position == 6 || position == 11 || position == 2;
}
})
//a layoutOrientation of layout manager, could be VERTICAL OR HORIZONTAL. HORIZONTAL by default
.setOrientation(ChipsLayoutManager.HORIZONTAL)
// row strategy for views in completed row, could be STRATEGY_DEFAULT, STRATEGY_FILL_VIEW,
//STRATEGY_FILL_SPACE or STRATEGY_CENTER
.setRowStrategy(ChipsLayoutManager.STRATEGY_FILL_SPACE)
// whether strategy is applied to last row. FALSE by default
.withLastRow(true)
.build();
rv.setLayoutManager(chipsLayoutManager);
请注意,如果您在运行时更改了重力解算器或行断路器条件,则不会影响已耗尽的项目和缓存的项目位置。你必须调用notifyItemChanged
上ChipsLayoutManager
,否则布局将是不可预测的。
器件电流方向已经默认选择。你可以用布局方向(操纵LTR或RTL)
在API> = 17:
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="rtl"
/>
或编程(在所有支持的API: ):
ViewCompat.setLayoutDirection(recyclerView, ViewCompat.LAYOUT_DIRECTION_RTL);
例如,查看示例应用程序。
热门源码