給TextView新增行分割線

2021-08-02 08:01:47 字數 2045 閱讀 4322

思路:通過在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...