Я хотел добавить функциональность «Подробнее» после нескольких строк текста.Я упомянул этого поставщика решений здесь
Ниже приведен результат моего кода:
Прежде чем нажать кнопку Подробнее:
После нажатия кнопки «Подробнее» нажимается:
Возникают две проблемы:1. Я хотел установить максимум 5 строк, но текст «Подробнее» опустился до 6-й строки.2. Перед нажатием кнопки «Читать далее» 1-я строка заканчивается «xeo», но после нажатия кнопки «Читать далее» 1-я строка заканчивается «xeoh».
Ниже приведен мой код:
/**
* Make Text View Resizable
* @param maxLine Max Line
* @param expandText Expand Text
* @param viewMore Is View More
*/
private void makeTextViewResizable(final int maxLine, final String expandText, final boolean viewMore) {
if (mTextMessageContentText.getTag() == null) {
mTextMessageContentText.setTag(mTextMessageContentText.getText());
}
ViewTreeObserver vto = mTextMessageContentText.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = mTextMessageContentText.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
if (maxLine == 0) {
int lineEndIndex = mTextMessageContentText.getLayout().getLineEnd(0);
String text = mTextMessageContentText.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
mTextMessageContentText.setText(text);
mTextMessageContentText.setMovementMethod(LinkMovementMethod.getInstance());
mTextMessageContentText.setText(
addClickablePartTextViewResizable(mTextMessageContentText.getText().toString(), maxLine, expandText,
viewMore), TextView.BufferType.SPANNABLE);
} else if (maxLine > 0 && mTextViewLineCount >= maxLine) {
int lineEndIndex = mTextMessageContentText.getLayout().getLineEnd(maxLine - 1);
String text = mTextMessageContentText.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
mTextMessageContentText.setText(text);
mTextMessageContentText.setMovementMethod(LinkMovementMethod.getInstance());
mTextMessageContentText.setText(addClickablePartTextViewResizable(mTextMessageContentText.getText().toString(), maxLine, expandText,
viewMore), TextView.BufferType.SPANNABLE);
} else {
int lineEndIndex = mTextMessageContentText.getLayout().getLineEnd(mTextViewLineCount - 1);
String text = mTextMessageContentText.getText().subSequence(0, lineEndIndex) + " " + expandText;
mTextMessageContentText.setText(text);
mTextMessageContentText.setMovementMethod(LinkMovementMethod.getInstance());
mTextMessageContentText.setText(
addClickablePartTextViewResizable(mTextMessageContentText.getText().toString(), lineEndIndex, expandText,
viewMore), TextView.BufferType.SPANNABLE);
}
}
});
}
/**
* Add Clickable Part Text View Resizable
* @param stringSpanned String Spanned
* @param maxLine Maximium Line
* @param spannableText Spannable Text
* @param viewMore Is View More
* @return Sapnnable String Builder
*/
private SpannableStringBuilder addClickablePartTextViewResizable(final String stringSpanned, final int maxLine, final String spannableText, final boolean viewMore) {
String str = stringSpanned.toString();
SpannableStringBuilder ssb = new SpannableStringBuilder(stringSpanned);
if (str.contains(spannableText)) {
ssb.setSpan(new TextViewClickableSpan(ActivityChatMessageInfo.this, false, R.color.primary_text_color){
@Override
public void onClick(View widget) {
if (viewMore) {
mTextMessageContentText.setLayoutParams(mTextMessageContentText.getLayoutParams());
mTextMessageContentText.setText(mTextMessageContentText.getTag().toString(), TextView.BufferType.SPANNABLE);
mTextMessageContentText.invalidate();
makeTextViewResizable(-1, "", false);
} else {
mTextMessageContentText.setLayoutParams(mTextMessageContentText.getLayoutParams());
mTextMessageContentText.setText(mTextMessageContentText.getTag().toString(), TextView.BufferType.SPANNABLE);
mTextMessageContentText.invalidate();
makeTextViewResizable(maxLine, getString(R.string.caption_chat_media_slider_read_more), true);
}
}
}, str.indexOf(spannableText), str.indexOf(spannableText) + spannableText.length(), 0);
}
return ssb;
}
Пожалуйста, совет.
Спасибо.