Skip to content

Commit

Permalink
add method getMoreLength() to calculate replace string length.
Browse files Browse the repository at this point in the history
  • Loading branch information
lovejjfg committed Dec 11, 2017
1 parent fb21658 commit 028ea24
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
4 changes: 3 additions & 1 deletion app/src/main/java/com/lovejjfg/demo/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val originalText = "奶茶妹妹章泽天成功入选2017年达沃斯全球杰出青年。全球杰出青年社区是世界经济论坛(达沃斯论坛)成立的多方利益相关者社区之一,致力于网罗全球最优秀青年才俊,改善世界状况。全球杰出青年的评选标准包括其卓越的职业成就和潜在领导力以及致力于推动变革的承诺。"
// val originalText = "Sister zhang zetian has been selected as the world's outstanding young man in davos in 2017. The world's outstanding youth community is one of the 1086 multi-stakeholder communities established in the world economy BBS (BBS), which aims to recruit the best young talents in the world and improve the situation of the world. The selection criteria for the world's outstanding young people include its outstanding professional achievements and potential leadership and commitment to promoting change."
val originalText = "奶茶妹妹章泽天成功入选2017年达沃斯全球杰出青年。全球杰出青年社区是世界经济论坛(达沃斯论坛)成立的多方利益相关者社区之10086一,致力于网罗全球最优秀青年才俊,改善世界状况。全球杰出青年的评选标准包括其卓越的职业成就和潜在领导力以及致力于推动变革的承诺。"
// val originalText = "奶茶妹妹章泽天成功入选2017年达沃斯全球杰出青年。全球杰出青年社区是世界经济论坛(达沃斯论坛)成立的多方利益相关者社区之一,致力于网罗全球最优秀青年才俊,改善世界状况。全球杰出青年的评选标准包括其卓越的职业成就和潜在领导力以及致力于推动变革的承诺。"
text.setLabelText("奶茶妹妹")
text.setOriginalText(originalText)

Expand Down
22 changes: 18 additions & 4 deletions lib/src/main/java/com/lovejjfg/powertext/ExpandableTextView.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,15 +122,17 @@ public boolean onPreDraw() {
return true;
}
int lineCount = layout.getLineCount();
System.out.println("lineCount:" + lineCount);
if (lineCount > mDefaultLineCount) {
String substring;
int moreLength = 0;
String mText;
if (!TextUtils.isEmpty(mLabelText)) {
String mText = "{" + mLabelText + "}" + mOriginalText;
substring = mText.substring(0, layout.getLineEnd(mDefaultLineCount - 1) - mMoreHint.length() - 1);
mText = "{" + mLabelText + "}" + mOriginalText;
} else {
substring = mOriginalText.toString().substring(0, layout.getLineEnd(mDefaultLineCount - 1) - mMoreHint.length() - 1);
mText = mOriginalText.toString();
}
moreLength = getMoreLength(layout, moreLength, mText);
substring = mText.substring(0, layout.getLineEnd(mDefaultLineCount - 1) - moreLength);
SpannableStringBuilder mOriginalBuilder = new SpannableStringBuilder(String.format("%s...%s", substring, mMoreHint));
mOriginalBuilder.setSpan(new ClickableSpan() {
@Override
Expand Down Expand Up @@ -162,6 +164,18 @@ public void updateDrawState(TextPaint ds) {
});
}

private int getMoreLength(Layout layout, int moreLength, String mText) {
int lastLine = mDefaultLineCount - 1;
moreLength++;
String newText = mText.substring(layout.getLineStart(lastLine), layout.getLineEnd(lastLine) - moreLength);

while (getPaint().measureText(newText + "..." + mMoreHint) > layout.getWidth()) {
moreLength++;
newText = mText.substring(layout.getLineStart(lastLine), layout.getLineEnd(lastLine) - moreLength);
}
return moreLength;
}

@Override
public void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
Expand Down

0 comments on commit 028ea24

Please sign in to comment.