Skip to content

Commit

Permalink
line mode fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Muratthekus committed Jan 4, 2021
1 parent 042db9a commit 3019dfa
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 27 deletions.
1 change: 0 additions & 1 deletion app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
<me.thekusch.view.ReadMoreTextView
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
Expand Down
60 changes: 34 additions & 26 deletions view/src/main/java/me/thekusch/view/ReadMoreTextView.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package me.thekusch.view

import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.os.Build
import android.text.Layout
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.TextPaint
Expand All @@ -17,7 +14,6 @@ import android.view.ViewTreeObserver
import androidx.annotation.ColorInt
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import androidx.core.view.doOnLayout
import java.lang.Exception

open class ReadMoreTextView @JvmOverloads constructor(
Expand All @@ -37,7 +33,7 @@ open class ReadMoreTextView @JvmOverloads constructor(

private var _textMode = TextMode.LINE.ordinal

private var _anchorPoint: Int = 20
private var _anchorPoint: Int = 10

private var mText: CharSequence? = null

Expand Down Expand Up @@ -86,6 +82,7 @@ open class ReadMoreTextView @JvmOverloads constructor(
get() = _isExpanded
set(value) {
_isExpanded = value
setText()
}

var anchorPoint: Int
Expand Down Expand Up @@ -142,7 +139,7 @@ open class ReadMoreTextView @JvmOverloads constructor(
}

private fun getDefColor(): Int {
return ContextCompat.getColor(context, R.color.defaultColor);
return ContextCompat.getColor(context, R.color.defaultColor)
}

override fun setText(text: CharSequence?, type: BufferType?) {
Expand All @@ -159,27 +156,30 @@ open class ReadMoreTextView @JvmOverloads constructor(
private fun getTrimmedText(): CharSequence {
var displayText: CharSequence = ""
if(isExpanded) {
displayText = this.mText!!
displayText = this.mText.toSafeCharSequence()
}else {
when(textMode) {
TextMode.LENGTH.ordinal -> {
if(mText!!.length>anchorPoint) {
displayText = mText!!.toString().subSequence(
if(mText.toSafeCharSequence().length>anchorPoint) {
displayText = mText.toSafeCharSequence().toString().subSequence(
0,
anchorPoint
)
}
}
TextMode.LINE.ordinal -> {
val lineCount = this.layout.lineCount
if(lineCount > anchorPoint) {
val lineEndIndex = this.layout.getLineEnd(anchorPoint)
displayText = mText!!.toString().subSequence(
if (layout == null) {
removeGlobalLayoutListener()
}

if (_lineCount > anchorPoint) {
displayText = mText.toSafeCharSequence().toString().subSequence(
0,
_lineEnd - anchorText.length
)
}else {
isExpanded = true
}

}
}
}
Expand All @@ -188,19 +188,18 @@ open class ReadMoreTextView @JvmOverloads constructor(

private fun getFinalText(): CharSequence {
val text = getTrimmedText()
if(isExpanded) {
val spannable = SpannableStringBuilder(text,
0,
text.length).append(anchorText)
return setClickableSpan(spannable,anchorText)
}else {
val spannable = SpannableStringBuilder(text,
0,
text.length).append(anchorText)
return setClickableSpan(spannable,anchorText)
}
val spannable = SpannableStringBuilder(text,
0,
text.length).append(anchorText)
return setClickableSpan(spannable,anchorText)

}

private fun CharSequence?.toSafeCharSequence(): CharSequence {
if(this == null)
return ""
else
return this
}

private fun setClickableSpan(span: SpannableStringBuilder, text: CharSequence): CharSequence{
Expand All @@ -215,10 +214,18 @@ open class ReadMoreTextView @JvmOverloads constructor(
override fun onGlobalLayout() {
viewTreeObserver.removeOnGlobalLayoutListener(this)
setLineEndIndex()
_lineCount = lineCount
}
})
viewTreeObserver.addOnPreDrawListener {
viewTreeObserver.removeOnPreDrawListener(this)
setLineEndIndex()
_lineCount = lineCount
true
}
}
}

private fun setLineEndIndex() {
try {
if(anchorPoint == 0){
Expand All @@ -230,13 +237,14 @@ open class ReadMoreTextView @JvmOverloads constructor(
}
}catch (e: Exception) {
//no-op
}finally {
//no-op
}
}

inner class TextClickableSpan: ClickableSpan() {
override fun onClick(widget: View) {
isExpanded = !isExpanded
setText()
}

override fun updateDrawState(ds: TextPaint) {
Expand Down

0 comments on commit 3019dfa

Please sign in to comment.