思路:通過在textview ondraw的方法裡把行分割線畫出來
自定義兩個屬性
name="linedividertextview">
name="line_divider"
format="reference"/>
name="line_divider_height"
format="dimension"/>
declare-styleable>
line_divider 分割線的drawable,可以是乙個顏色,,只要是drawable就可以
line_divider_height 分割線的高度
畫分割線
我們只需找出行與行中間的座標即可
可以通過getlinebounds(int line, rect bounds)這個方法獲取行的邊框。注意的地方是行的邊框為文字加上行間距(設定了linespaceextra),所以行與行中間的y座標為
底部座標減去 行間距的一半
ondraw**如下
@override
protected
void
ondraw(canvas canvas)
getlinebounds(i, mrect);
linedivider.setbounds(
mrect.left,
(int) (mrect.bottom - getlinespacingextra() / 2 - linedividerheight / 2),
mrect.right,
(int) (mrect.bottom - getlinespacingextra() / 2 + linedividerheight / 2));
linedivider.draw(canvas);}}
然後再xml引用這個自定義view""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent">
"match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">
.yu.widget
.linedividertextview
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:linespacingextra="8dp"
android:text="@string/text1"
android:textsize="16sp"
.yu.widget
.linedividertextview
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:linespacingextra="8dp"
android:text="@string/text2"
android:textsize="16sp"
.yu.widget
.linedividertextview
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:linespacingextra="8dp"
android:text="@string/text3"
android:textsize="16sp"
如圖
需要注意的地方
根據line_divider_height 適當設定linespaceextra的大小
行間距相容問題 原始碼
新增分割線
importandroid.content.context importandroid.content.res.typedarray importandroid.graphics.canvas importandroid.graphics.rect importandroid.graphics.dr...
給每個Item分割線
首先要在drawable裡新建乙個檔案,列如名字drivier,這個檔案裡的 如下 然後在values裡的style裡新增一段話 name android listdivider drawable drivieritem 如下 一樣,新建乙個類,然後在mainactivity裡用recyclervi...
為RecyclerView新增分割線
由於recyclerview並沒有支援divider這樣的屬性,所以就需要我們自己去實現。這裡主要實現第二種 建立類繼承及recyclerview.itemdecoration public class myitemdecoration extends recyclerview.itemdecora...