-
2017-06-26 09:50:47
在使用tablayout时,tablayout的tab之间是没有分割线的,有时为了让tab看起来更美观,我们会在tab之间加上一条分割线。方法如下:
LinearLayout linearLayout= (LinearLayout) mTab.getChildAt(0); linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); linearLayout.setDividerDrawable(ContextCompat.getDrawable(mContext,R.drawable.tablayout_center_line)); linearLayout.setDividerPadding(8);
按照此方法即可实现。。。
更多相关内容 -
安卓RecyclerView使用及添加自定义分割线
2018-10-30 16:40:24安卓RecyclerView添加自定义分割线,使用以及2种分割线用法,系统自带以及自定义分割线 -
ListTile加分割线
2020-08-19 16:32:04e['youngName'], style: TextStyle(fontSize: 30), ), subtitle: Text( e['YoungMobile'], style: TextStyle(fontSize: 27), ), ), Divider( height: 0.0, indent: 0.0, color: Colors.black26, ),//---分割线的添加...child: Column( children: items.map((e) { return Slidable( key: Key(e['title']), actionPane: SlidableScrollActionPane(), //滑出选项的面板 动画 actionExtentRatio: 0.25, child: Column(children: <Widget>[ ListTile( leading: CircleAvatar( radius: 30, backgroundColor: Color(0xFF1A4A7A), child: Text( e['youngName'].toString().substring(0, 1), style: TextStyle(fontSize: 30), ), foregroundColor: Colors.white, ), title: Text( e['youngName'], style: TextStyle(fontSize: 30), ), subtitle: Text( e['YoungMobile'], style: TextStyle(fontSize: 27), ), ), Divider( height: 0.0, indent: 0.0, color: Colors.black26, ),//---分割线的添加Divider()控件--- ]), actions: <Widget>[ //左侧按钮列表 e['Mark'] == 1 ? IconSlideAction( caption: '紧急联系人', color: Colors.blue, foregroundColor: Colors.yellowAccent, icon: Icons.star, onTap: () { G.toalert('该子女已是紧急联系人!'); }) : IconSlideAction( caption: '标记', color: Colors.black, icon: Icons.star, onTap: () { Num = e['YoungMobile']; print(Num); markChild(Num); }) ], secondaryActions: <Widget>[ //右侧按钮列表 IconSlideAction( caption: '删除', color: Colors.red, icon: Icons.delete, closeOnTap: false, onTap: () { showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return new AlertDialog( title: new Text('提示'), content: new SingleChildScrollView( child: new ListBody( children: <Widget>[ new Text( '确认删除该子女信息?', ), ], ), ), actions: <Widget>[ FlatButton( child: Text('取消'), onPressed: () => Navigator.of(context).pop(false), ), FlatButton( child: Text('确定'), onPressed: () { Num = e['YoungMobile']; deleteChild(Num); Navigator.of(context).pop(true); }), ], ); }, ); }, ), ], ); }).toList(), ),
-
android中RecyclerView自定义分割线实现
2020-08-31 01:21:35本篇文章主要介绍了android中RecyclerView自定义分割线实现,由于RecyclerView的布局方式多种多样,所以它的分割线也根据布局的不同有所差异,本文只针对LinearLayoutManager线性布局。 -
RecyclerView添加分割线
2022-04-01 09:28:47RecyclerView 并没有 divider 属性,但是我们可以通过 RecyclerView 的 addItemDecoration() 来添加分割线,该方法参数为 RecyclerView.ItemDecoration。 介绍 当 RecyclerView 添加 ItemDecoration 后,...RecyclerView 并没有 divider 属性,但是我们可以通过 RecyclerView 的 addItemDecoration() 来添加分割线,该方法参数为 RecyclerView.ItemDecoration。
介绍
当 RecyclerView 添加 ItemDecoration 后,RecyclerView 在绘制每个 item 的时候,会去绘制 decorator,也就是会调用 ItemDecoration 的 onDraw() 和 onDrawOver() 方法。
RecyclerView.ItemDecoration 是抽象类,主要提供三个方法:
- onDraw(Canvas c, RecyclerView parent, State state): 在绘制item(drawChild) 前调用
- onDrawOver(Canvas c, RecyclerView parent, State state): 在绘制item(drawChild) 后调用
- getItemOffsets(Rect outRect, View view, RecyclerView parent, State state):outRect设置 item 的偏移量,用于绘制 decorator(也就是divider)
关于 getItemOffsets 函数:
RecyclerView 添加分割线,实际上就是 RecyclerView 的 item 之间添加了用作分割线的View,自然而然后续的 item 就会有偏移量,所以用 getItemOffsets 中的 outRect 来保存 item 的偏移量,从而便于绘制 decorator。实现
实际上在当前版本的
RecyclerView (25.3.1)
中已经有ItemDecoration
关于分割线的默认实现类DividerItemDecoration
package android.support.v7.widget; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.support.v4.view.ViewCompat; import android.view.View; import android.widget.LinearLayout; public class DividerItemDecoration extends RecyclerView.ItemDecoration { public static final int HORIZONTAL = LinearLayout.HORIZONTAL; public static final int VERTICAL = LinearLayout.VERTICAL; // 如果不设置,则默认的分割线为 android.R.attr.listDivider 指定的 drawable private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; private Drawable mDivider; /** * Current orientation. Either {@link #HORIZONTAL} or {@link #VERTICAL}. */ private int mOrientation; private final Rect mBounds = new Rect(); /** * Creates a divider {@link RecyclerView.ItemDecoration} that can be used with a * {@link LinearLayoutManager}. * * @param context Current context, it will be used to access resources. * @param orientation Divider orientation. Should be {@link #HORIZONTAL} or {@link #VERTICAL}. */ public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } /** * Sets the orientation for this divider. This should be called if * {@link RecyclerView.LayoutManager} changes orientation. * * @param orientation {@link #HORIZONTAL} or {@link #VERTICAL} */ public void setOrientation(int orientation) { if (orientation != HORIZONTAL && orientation != VERTICAL) { throw new IllegalArgumentException( "Invalid orientation. It should be either HORIZONTAL or VERTICAL"); } mOrientation = orientation; } /** * Sets the {@link Drawable} for this divider. * * @param drawable Drawable that should be used as a divider. */ public void setDrawable(@NonNull Drawable drawable) { if (drawable == null) { throw new IllegalArgumentException("Drawable cannot be null."); } mDivider = drawable; } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { if (parent.getLayoutManager() == null) { return; } if (mOrientation == VERTICAL) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } // 绘制 RecyclerView 为垂直布局时的分割线,此时分割线为水平分割线 @SuppressLint("NewApi") private void drawVertical(Canvas canvas, RecyclerView parent) { canvas.save(); final int left; final int right; // 需要考虑clipToPadding的boolean值 if (parent.getClipToPadding()) { left = parent.getPaddingLeft(); right = parent.getWidth() - parent.getPaddingRight(); canvas.clipRect(left, parent.getPaddingTop(), right, parent.getHeight() - parent.getPaddingBottom()); } else { left = 0; right = parent.getWidth(); } final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); parent.getDecoratedBoundsWithMargins(child, mBounds); final int bottom = mBounds.bottom + Math.round(ViewCompat.getTranslationY(child)); final int top = bottom - mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } canvas.restore(); } // 绘制 RecyclerView 为水平布局时的分割线,此时分割线为垂直分割线 @SuppressLint("NewApi") private void drawHorizontal(Canvas canvas, RecyclerView parent) { canvas.save(); final int top; final int bottom; // 需要考虑clipToPadding的boolean值 if (parent.getClipToPadding()) { top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); canvas.clipRect(parent.getPaddingLeft(), top, parent.getWidth() - parent.getPaddingRight(), bottom); } else { top = 0; bottom = parent.getHeight(); } final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); final int right = mBounds.right + Math.round(ViewCompat.getTranslationX(child)); final int left = right - mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } canvas.restore(); } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if (mOrientation == VERTICAL) { // 垂直方向的RecyclerView, item 的 bottom 偏移量 = 分割线高度 outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { // 水平方向的RecyclerView, item 的 right 偏移量 = 分割线宽度 outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } }
在代码中添加:
recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), mLayoutManager.getOrientation()));
就有了分割线。 默认的分割线效果是系统自带的
listDivider
的效果,我们也可以在主题配置文件中自定义全局的分割线,或者调用setDivider
为每个RecyclerView
设置单独的分割线。小结
总的来说,目前添加分割线只需要使用
recyclerview-v7
包下的DividerItemDecoration
类即可,分割线可以通过 setDivider 来个性化指定,也可以通过配置主题中的android:listDivider
来全局指定。例如:
RecyclerView mRecyclerView; mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
这个能满足一般需求,但是如果我想使用自定义的分割线呢,看以下代码
DividerItemDecoration divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); divider.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); mRecyclerView.addItemDecoration(divider);
package com.example.administrator.myapplication; import android.content.ContextWrapper; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.RecyclerView; import java.util.List; import java.util.ArrayList; public class BodyActivity extends AppCompatActivity { RecyclerView mRecyclerView; @Override protected void onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_body); //1.获取控件 mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); //设置布局方式 mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));//线性布局 // mRecyclerView.setLayoutManager(new GridLayoutManager(this,2));//网格布局 mRecyclerView.setHasFixedSize(true); //是否重新计算大小 //3.准备数据 List<News> newsList = new ArrayList<>(); News news; for (int i = 1; i <= 20; i++) { news = new News(); news.setNewsTitle("java是世界上最好的语言" + i); news.setNewsSource("新华网" + i); news.setPublishTime("2018-8-6"); newsList.add(news); } //添加Android自带的分割线 // mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); //添加自定义的分割线 DividerItemDecoration divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); divider.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); mRecyclerView.addItemDecoration(divider); //4.准备适配器 NewsAdapter newsAdapter = new NewsAdapter(newsList); mRecyclerView.setAdapter(newsAdapter); } }
-
半圆加虚线分割线效果
2018-11-12 14:14:25android,半圆加虚线分割线效果,亲测可用,android,半圆加虚线分割线效果 -
RecyclerView中利用GridLayoutManager实现item四周都带有分割线效果
2016-06-01 23:38:03RecyclerView中利用GridLayoutManager实现item四周都带有分割线效果,博客链接:http://blog.csdn.net/abfo12 -
多种HTML分割线
2021-06-08 16:28:376、双线 color=#987cb9 SIZE=3> 7、立体效果 width="80%" color=#987cb9 SIZE=1> 8、钢针效果 width="80%" color=#987cb9 SIZE=1> 9、垂直分割线 cellspacing="0" style="height:265px;border-left-style:solid; ...一、普通
1、横线
2、居中横线
size=1>
align
线条位置(可选left、right、center);width线条长度;color颜色;size厚度
二、特效(效果并不是孤立的,可相互组合)
1、两头渐变透明
SIZE=3>
2、纺锤形
color=#987cb9 SIZE=10>
3、右边渐变透明
color=#987cb9 SIZE=3>
4、左边渐变透明
color=#987cb9 SIZE=3>
5、虚线
color=#987cb9 SIZE=1>
6、双线
color=#987cb9 SIZE=3>
7、立体效果
width="80%" color=#987cb9 SIZE=1>
8、钢针效果
width="80%" color=#987cb9 SIZE=1>
9、垂直分割线
cellspacing="0" style="height:265px;border-left-style:solid;
border-bottom-style:none;border-right-style:none;border-top-style:none">
-
Android 给RecyclerView添加分割线的具体步骤(分享)
2021-01-04 06:07:53【吐槽】RecyclerView没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用。 给RecyclerView添加分割线的步骤 1、新建类继承于RecyclerView.ItemDecoration,此为是抽象类: ... -
css怎么设置分割线
2021-08-04 07:36:48css设置分割线的方法:首先创建一个HTML实例文件;然后在body中创建三个div;最后给第二个div设置样式为“padding-top:3px;width:40%;border-top:1px solid #666666;”即可。本文操作环境:windows7系统、HTML5&... -
Python 菜单中的分割线
2022-03-08 21:16:13有时候,⼀个菜单项的各个菜单可能并不是⼀个类型, 有可能是两种类型,在它们中间可以插⼀个分割线来界定界限。插⼊分割线和插⼊正常的菜单项操作很相似,只是使⽤ 的⽅法是 add_separator,该⽅法⽆需参数。测试... -
css之分割线特效
2022-05-15 21:12:28温馨小提示,下面的盒子用的都是... ... <div class="parent1"> <div class="div1">斜分割线</div> <div class="div2">SETTINGS</div> <div class="div3">HTML</div> <. -
[CSS]几种实现分割线的方法
2021-06-11 18:02:01HTML结构小小分隔线 单标签实现小小分隔线 巧用色实现小小分隔线 inline-block实现小小分隔线 浮动来实现———————————小小分隔线 字符来实现————————————对应的CSS.demo{width:600px}.line_01... -
jquery列表分割线插件.rar
2019-07-04 21:24:52jquery列表分割线插件 -
QT代码添加水平和垂直分割线,且设置分割线的样式。
2021-10-08 17:59:04代码实现线条控件,一般使用QFrame来实现。 QPushButton* btn1 = new QPushButton("1",this); QPushButton* btn2 = new QPushButton("2",this); QPushButton* btn3 = new QPushButton("3",this);... -
flutter listview 设置分割线
2020-03-06 13:49:14喜欢可以加Q群号:913934649,点赞,评论; 简书: https://www.jianshu.com/u/88db5f15770d csdn:https://me.csdn.net/beyondforme 掘金:https://juejin.im/user/5e09a9e86fb9a016271294a7 -
vue中分割线的实现
2019-08-02 15:02:32项目中,需要实现分割线的效果,如图: 奈何 element 中的分割线用起来报错,无奈只好自己写,很简单,先说下原理: 给一个高为1像素的盒子,盒子宽度根据要求设定,再设置盒子颜色,排列方式为相对定位,盒子里... -
css实现分割线或者小竖线
2021-11-16 13:48:36.line{ display: inline-block; width: 2px; background-color: #999;... } 或者另一种思路在标签上加伪元素 span::after { content:''; width: 2px; background-color: #999; margin: 8px 20px; } -
echarts的Y轴的分割线以及线条样式
2022-04-06 08:55:29yAxis: { splitNumber: 5, splitLine: { show: true, lineStyle: { type: 'dotted', color: 'rgba(255, 255, 255,0.3)' } } } ...splitNumber代表Y轴分割的段... lineStyle设置分割线的样式,type:'dotted’设置的 -
前端html-常用分割线
2021-06-30 14:05:15普通 <HR align=center width=300 color=#987cb9 SIZE=1> align 线条位置(可选left、right、center);width 线条长度;color 颜色;size 厚度 特效(效果并不是孤立的,可相互组合) 1、两头渐变透明: ... -
Android实现RecyclerView添加分割线的简便方法
2021-01-20 09:35:56刚开始学习RecyclerView的时候我跟着一个视频学的,当时添加分割线是从外面导入一个Java类,然后使用里面的函数来创建分割线的,所以一直以来我都是这样做的。直到前几天才无意中发现,原来v7包中提供了一个... -
RecyclerView自定义Grid(网格)布局分割线
2021-08-26 10:51:17这次主要是介绍分割线的写法以及recyclerView的删除和添加功能。 本文参考链接: Android RecyclerView 使用完全解析 体验艺术般的控件ItemDecoration解析(一) getItemOffsetsRecyclerView 更新单个item时,闪烁... -
【Android】RecyclerView添加分割线最易懂解析
2018-08-27 15:58:52【Android】RecyclerView添加分割线最易懂解析 RecyclerView可以说是开发一个Android程序必不可少的一个控件,给它的item添加分割线也是一个几乎都会有的需求。但是,相对于曾经的ListView,RecyclerView添加分割线... -
微信小程序开发:如何快速实现添加一条分割线的项目需求
2021-02-04 19:15:59在微信小程序开发的时候,有些需求是参照移动端开发来设计的,基本上微信小程序就是基于微信的移动端应用,所以基本上各种需求都和...这里分享两种写法,第一种直接画分割线,第二种用一个标签包一下再画分割线。 (1. -
Recyclerview设置GridLayoutManager分割线
2020-08-18 15:19:35public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration { private int mSpanCount;//横条目数量 private int mRowSpacing;//行间距 private int mColumnSpacing;// 列间距 ... -
[CSS] 用伪元素:after实现分割线和气泡
2021-03-07 14:33:54学习前端网页开发并将其应用于工作中已经两个月了,发现前端包括的内容真的是无比丰富,知识量巨大……漫漫长路远,尚需艰苦努力。...在网页设计中显示分割线可以使用元素的border单边显示即可,... -
QT界面中添加分割线
2020-03-17 14:08:26参考博客:https://blog.csdn.net/Superman___007/article/details/95168808?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 我用的是大神的方法2,然后... -
Flutter ListView设置分割线及列表嵌套不同的Item
2022-01-12 11:06:33一.flutter分割线divider中属性简介 const Divider({ Key? key, this.height, //分割线区域的高度 this.thickness, //分割线的厚度,即分割线的高度 this.indent, //起点缩进距离 this.endIndent, //终点...