当前位置: 首页 > wzjs >正文

免费自助制作永久网站什么是外网服务器

免费自助制作永久网站,什么是外网服务器,wordpress与,wordpress 防站教程自定义RecyclerView的ItemDecoration,用于处理网格布局的间距,网格布局间距装饰器(支持边缘间距独立控制),为RecyclerView网格布局提供灵活的间距控制,可单独设置各边缘间距。核心功能说明:灵活的边缘控制:…

自定义RecyclerView的ItemDecoration,用于处理网格布局的间距,网格布局间距装饰器(支持边缘间距独立控制),为RecyclerView网格布局提供灵活的间距控制,可单独设置各边缘间距。

核心功能说明:

  1. 灵活的边缘控制:可单独设置首列/末列/首行/末行的间距
  2. 智能间距分配:
  • 多列布局时自动将间距平分到相邻item两侧
  • 单列布局时直接应用指定间距

    3.两种边缘模式:

  • includeEdge=true:默认包含顶部/底部边缘间距
  • includeEdge=false:不包含默认边缘间距(可单独设置)

      4.辅助计算功能:提供getTotalWidthNeeded()方法预计算item宽度

如:GridLayoutManager 设计一个一行4列的,且每列的间距都是10dp

// 在Activity或Fragment中
RecyclerView recyclerView = findViewById(R.id.recyclerView);// 设置GridLayoutManager,4列
GridLayoutManager layoutManager = new GridLayoutManager(this, 4);
recyclerView.setLayoutManager(layoutManager);// 设置ItemDecoration来添加间距
int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.grid_spacing);// 移除旧的 ItemDecoration(避免重复添加)if (recyclerView.getItemDecorationCount() > 0) {recyclerView.removeItemDecorationAt(0);}// 添加自定义边距recyclerView.addItemDecoration(new GridSpacingItemDecoration(4,spacingInPixels ,true,spacingInPixels,spacingInPixels,0,spacingInPixels));// 设置适配器
ImageAdapter adapter = new ImageAdapter(imageList); // 假设有适配器
recyclerView.setAdapter(adapter);

GridSpacingItemDecoration.java 代码:

import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;/*** 网格布局间距装饰器(支持边缘间距独立控制)* 功能:为RecyclerView网格布局提供灵活的间距控制,可单独设置各边缘间距*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {private final int spanCount;          // 网格列数private final int spacing;            // 默认间距大小(像素)private final boolean includeEdge;    // 是否包含边缘间距(影响顶部/底部默认行为)// 以下参数为可选边缘间距控制(-1表示使用默认间距)private int includeFirstColumnSpacing = -1;   // 第一列左边距(可覆盖默认值)private int includeLastColumnSpacing = -1;    // 最后一列右边距(可覆盖默认值)private int includeFirstRowTopSpacing = -1;   // 第一行上边距(可覆盖默认值)private int includeLastRowBottomSpacing = -1; // 最后一行下边距(可覆盖默认值)/*** 全参数构造函数* * @param spanCount 网格列数(必须大于0)* @param spacing 默认间距值(像素)* @param includeEdge 是否包含边缘间距(影响顶部/底部默认行为)* @param includeFirstColumnSpacing 第一列左边距(-1表示使用默认间距)* @param includeLastColumnSpacing 最后一列右边距(-1表示使用默认间距)* @param includeFirstRowTopSpacing 第一行上边距(-1表示使用默认间距)* @param includeLastRowBottomSpacing 最后一行下边距(-1表示使用默认间距)*/public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge,int includeFirstColumnSpacing,int includeLastColumnSpacing,int includeFirstRowTopSpacing,int includeLastRowBottomSpacing) {this.spanCount = spanCount;this.spacing = spacing;this.includeEdge = includeEdge;this.includeFirstColumnSpacing = includeFirstColumnSpacing;this.includeLastColumnSpacing = includeLastColumnSpacing;this.includeFirstRowTopSpacing = includeFirstRowTopSpacing;this.includeLastRowBottomSpacing = includeLastRowBottomSpacing;}@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent,RecyclerView.State state) {int position = parent.getChildAdapterPosition(view); // 当前item位置int column = position % spanCount; // 当前item所在列(0~spanCount-1)int totalItemCount = parent.getAdapter().getItemCount(); // 总item数int totalRows = (int) Math.ceil((double) totalItemCount / spanCount); // 计算总行数int currentRow = position / spanCount + 1; // 当前行号(从1开始)/* ========== 1. 处理左右边距 ========== */if (spanCount == 1) {// 单列特殊情况处理outRect.left = getEffectiveSpacing(includeFirstColumnSpacing, spacing);outRect.right = getEffectiveSpacing(includeLastColumnSpacing, spacing);} else {// 多列常规处理if (column == 0) {// 第一列:左间距可定制,右间距为默认一半outRect.left = getEffectiveSpacing(includeFirstColumnSpacing, spacing);outRect.right = spacing / 2;} else if (column == spanCount - 1) {// 最后一列:左间距为默认一半,右间距可定制outRect.left = spacing / 2;outRect.right = getEffectiveSpacing(includeLastColumnSpacing, spacing);} else {// 中间列:左右间距均为默认一半(实现等间距分布)outRect.left = spacing / 2;outRect.right = spacing / 2;}}/* ========== 2. 处理上下边距 ========== */if (includeEdge) {// 包含边缘模式if (currentRow == 1) {// 第一行顶部间距outRect.top = getEffectiveSpacing(includeFirstRowTopSpacing, spacing);}// 底部间距处理if (currentRow == totalRows) {// 最后一行底部间距可定制outRect.bottom = getEffectiveSpacing(includeLastRowBottomSpacing, spacing);} else if (currentRow < totalRows) {// 中间行固定底部间距outRect.bottom = spacing;}} else {// 不包含边缘模式outRect.top = currentRow == 1 ? getEffectiveSpacing(includeFirstRowTopSpacing, spacing) : spacing;// 最后一行特殊处理if (currentRow == totalRows) {outRect.bottom = getEffectiveSpacing(includeLastRowBottomSpacing, spacing);}}}/*** 获取有效间距值* @param customSpacing 自定义间距值(-1表示使用默认值)* @param defaultSpacing 默认间距值* @return 实际使用的间距值*/private int getEffectiveSpacing(int customSpacing, int defaultSpacing) {return customSpacing > -1 ? customSpacing : defaultSpacing;}/*** 计算RecyclerView需要的总宽度(用于预计算item宽度)* @param screenWidth 屏幕可用宽度* @return 单个item的理论宽度*/public int getTotalWidthNeeded(int screenWidth) {if (spanCount == 0) return screenWidth;// 计算总间距 = 列间间距 + 边缘间距int totalSpacing = (spanCount > 1) ? (spanCount - 1) * spacing : 0;if (includeFirstColumnSpacing > 0) totalSpacing += spacing;if (includeLastColumnSpacing > 0) totalSpacing += spacing;// 返回单个item宽度 = (总宽度 - 总间距) / 列数return (screenWidth - totalSpacing) / spanCount;}
}

http://www.dtcms.com/wzjs/814503.html

相关文章:

  • 茌平网站建设菜谱制作深圳公司装修设计
  • 制作简单的个人网站广州域名备案
  • 宝安专业网站建设阿里云虚拟主机怎么建立网站
  • 仿门户网站上海专业做网站的公司
  • 网站维护页面源码怎样做社交网站
  • 广州市外贸网站建设服务机构重庆建网站哪家售后服务比较好
  • 网站营销方法有哪些内容秦皇岛网签查询系统
  • 深圳电商平台网站建设asp网站栏目如何修改
  • 南京搜必应网站优化seo整站优化+WordPress
  • 效果图网站推荐大全面包砖网站开发需要哪些知识
  • 网站域名在山东备案却在苏州设计网站会员哪个好用
  • 平原县建设局网站cms 网站模板
  • 双鸭山建设网站微网站建设市场分析
  • 如何配置网站服务器怎么看网站什么时候做的
  • 如何把网站主关键词做到百度首页安卓app下载
  • 企业网站优化费用建筑公司注册
  • 做精品课程网站需要啥素材网站空间到期怎么办
  • 在线网站长春企业网站模板建站
  • 泰安网站建设制作wordpress自定义查询
  • 百度网站推广申请wordpress添加浮动
  • 朱能源做网站杭州建设网 执法人员名单
  • 深圳市盐田区住房建设局网站广州代做网站
  • dw制作网站模板企业网站托管外包怎么做
  • 泉州手机网站制作特网站建设
  • 深圳盐田网站建设wordpress源码学习
  • 河南省大型项目建设办公室网站音乐制作人是干什么的
  • 网站开发 东莞怎么搭建网站平台
  • 旅游网站建设哪家好seo高级教程
  • 企业网站源码搭建杭州酒店网站建设方案
  • 免费建建网站个人养老金交15年领多少