Skip to content

Commit 65fac40

Browse files
committed
增加了计算用宽度
1 parent 7db4610 commit 65fac40

3 files changed

Lines changed: 19 additions & 9 deletions

File tree

app/src/main/res/layout/activity_main.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@
2121
<com.foolchen.lib.multiitemtextview.MultiItemTextView
2222
android:id="@+id/mitv"
2323
android:layout_width="match_parent"
24-
android:layout_height="300dp"
24+
android:layout_height="wrap_content"
2525
android:background="@color/colorAccent"
2626
app:mitv_bottom_divider_enable="true"
2727
app:mitv_divider_width="8dp"
2828
app:mitv_end_divider_enable="true"
2929
app:mitv_gravity="center_vertical"
3030
app:mitv_item_padding="10dp"
31+
app:mitv_item_width="100dp"
3132
app:mitv_middle_divider_enable="true"
3233
app:mitv_start_divider_enable="true"
3334
app:mitv_text_size="20dp"
34-
app:mitv_texts="测试1用的文本1234567890|测试用的文本0987654321|1223131212fd|dfsdffsdf|测试分类时间付了款精灵石肯德基六块腹肌凉快点djlfjkdljslsldjfkljfklsdjflk|测试分类时间付了款精灵石肯德基六块腹肌凉快点"
35+
app:mitv_texts="测试1用的文本1234567890|测试用的文本0987654321|1223131212fd|dfsdffsdf|测试分类时间付了款精灵石肯德基六块腹肌凉快点djlfjklsldjfkljfklsdjflk|测试分类时间付了款精灵石肯德基六块腹肌凉快点"
3536
app:mitv_top_divider_enable="true"
3637
/>
3738

library/src/main/java/com/foolchen/lib/multiitemtextview/MultiItemTextView.kt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ open class MultiItemTextView : View {
5252
private val mShadowItems = ArrayList<String>()
5353
// 分割后的字符串,用于绘制多行文本
5454
private val mDividedItems = ArrayList<List<String>>()
55-
55+
// 该列表中的元素仅用于计算高度(mRefWidth!=-1F时)
56+
private val mRefDividedItems = ArrayList<List<String>>()
5657

5758
constructor(context: Context?) : super(context) {
5859
init(context, null)
@@ -116,6 +117,7 @@ open class MultiItemTextView : View {
116117
mTextSize = ta.getDimension(R.styleable.MultiItemTextView_mitv_text_size, 24F)
117118
mItemWidth = ta.getDimension(R.styleable.MultiItemTextView_mitv_item_width, -1F)
118119
mItemHeight = ta.getDimension(R.styleable.MultiItemTextView_mitv_item_height, -1F)
120+
mRefWidth = ta.getDimension(R.styleable.MultiItemTextView_mitv_ref_item_width, -1F)
119121
mDividerColor = ta.getDimensionPixelSize(R.styleable.MultiItemTextView_mitv_divider_color,
120122
Color.GRAY)
121123
mDividerWidth = ta.getDimension(R.styleable.MultiItemTextView_mitv_divider_width, 1F)
@@ -266,9 +268,9 @@ open class MultiItemTextView : View {
266268
mPaint.color = mDividerColor
267269
mPaint.strokeWidth = mDividerWidth
268270
mPaint.style = Paint.Style.FILL
269-
if (mStartDividerEnable) {
270-
canvas.drawRect(0F, 0F, mDividerWidth, height.toFloat(), mPaint)
271-
}
271+
if (mStartDividerEnable) {
272+
canvas.drawRect(0F, 0F, mDividerWidth, height.toFloat(), mPaint)
273+
}
272274
if (mTopDividerEnable) {
273275
canvas.drawRect(0F, 0F, width.toFloat(), top, mPaint)
274276
}
@@ -355,11 +357,11 @@ open class MultiItemTextView : View {
355357
private fun calItemHeight(): Float {
356358
return if (mItemHeight == -1F) {
357359
var lines = 0
358-
mDividedItems
360+
(if (mRefWidth == -1F) mDividedItems else mRefDividedItems)
359361
.asSequence()
360362
.filter { it.size > lines }
361363
.forEach { lines = it.size }
362-
paddingTop + paddingBottom + mItemPadding[1] + mItemPadding[3] + lines * getDisplayFontSize().toFloat()
364+
paddingTop + paddingBottom + mItemPadding[1] + mItemPadding[3] + lines * getDisplayFontSize().toFloat() + (if (mTopDividerEnable) mDividerWidth else 0F) + (if (mBottomDividerEnable) mDividerWidth else 0F)
363365
} else {
364366
mItemHeight
365367
}
@@ -370,10 +372,17 @@ open class MultiItemTextView : View {
370372
// 每次重新分割item前都将已经分割的清空
371373
mDividedItems.clear()
372374
// 首先需要计算可绘制的最大宽度
375+
373376
val drawableWidth = calItemWidth(width) - mItemPadding[0] - mItemPadding[2]
377+
374378
if (drawableWidth > 0) {
375379
// 需要保证每一行的宽度都小于drawableWidth
376380
mShadowItems.mapTo(mDividedItems) { divideItem(drawableWidth, it) }
381+
if (mRefWidth != -1F) {
382+
mShadowItems.mapTo(mRefDividedItems) {
383+
divideItem(mRefWidth - paddingLeft - paddingRight - mItemPadding[0] - mItemPadding[2], it)
384+
}
385+
}
377386
}
378387
}
379388

library/src/main/res/values/attrs.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@
2525
<enum name="center_vertical" value="1"/>
2626
<enum name="center" value="2"/>
2727
</attr>
28-
<attr format="dimension" name="mitv_ref_width"/>
28+
<attr format="dimension" name="mitv_ref_item_width"/>
2929
</declare-styleable>
3030
</resources>

0 commit comments

Comments
 (0)