Android textview 文字拼接/文字展开收起

1、文本拼接:
private SpannableStringBuilder setGross(String haveReadGross, String taskGross) {
StringBuffer stringBuffer = new StringBuffer();
String haveRead = “已阅总量”;
String task = “\n\n任务总量”;

stringBuffer.append(haveRead);
stringBuffer.append(haveReadGross);
stringBuffer.append(task);
stringBuffer.append(taskGross);

SpannableStringBuilder style = new SpannableStringBuilder(stringBuffer.toString());

int start_1 = haveRead.length();
int end_1 = start_1 + haveReadGross.length();
style.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color_0089FF)), start_1, end_1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

int start_2 = end_1 + task.length();
int end_2 = start_2 + taskGross.length();
style.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color_222222)), start_2, end_2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

return style;
}
textview.setText(setGross(“value1″,”value2”));

2、展开收起
String expand = “[展开]”;
String collapse = “[收起]”;

/**
* 是否需要添加展开处理
* @param contentTextView
* @param expandLine
* @param textValue
*/
private void expandText(TextView contentTextView,int expandLine,String textValue) {
CharSequence text = contentTextView.getText();
int width = contentTextView.getWidth();
TextPaint paint = contentTextView.getPaint();
Layout layout = contentTextView.getLayout();
int line = layout.getLineCount();
if (line > expandLine) {
int start = layout.getLineStart((expandLine-1));
int end = layout.getLineVisibleEnd(expandLine-1);
CharSequence lastLine = text.subSequence(start, end);

float expandWidth = paint.measureText(expand);
float remain = width – expandWidth;

CharSequence ellipsize =
TextUtils.ellipsize(lastLine,
paint,
remain,
TextUtils.TruncateAt.END);

ClickableSpan clickableSpan = new ClickableSpan() {

@Override
public void onClick(@NonNull View widget) {

collapseText(contentTextView,expandLine,textValue);
}
};

SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(text.subSequence(0, start));
ssb.append(ellipsize);
ssb.append(expand);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(“#0089FF”)),
ssb.length() – expand.length(), ssb.length(),
Spanned.SPAN_INCLUSIVE_INCLUSIVE);
ssb.setSpan(clickableSpan,
ssb.length() – expand.length(), ssb.length(),
Spanned.SPAN_INCLUSIVE_INCLUSIVE);
contentTextView.setMovementMethod(LinkMovementMethod.getInstance());
contentTextView.setText(ssb);
}
}

/**
* 收起处理
* @param tv
* @param expandLine
* @param textString
*/
private void collapseText(TextView tv, int expandLine, String textString){
ClickableSpan clickableSpan = new ClickableSpan() {

@Override
public void onClick(@NonNull View widget) {
expandText(tv,expandLine,textString);
}
};
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(textString);
ssb.append(collapse);
ssb.setSpan(new ForegroundColorSpan(Color.rgb(0,137,255)),
ssb.length() – collapse.length(), ssb.length(),
Spanned.SPAN_INCLUSIVE_INCLUSIVE);
ssb.setSpan(clickableSpan,
ssb.length() – collapse.length(), ssb.length(),
Spanned.SPAN_INCLUSIVE_INCLUSIVE);
tv.setText(ssb);
}
备注:展开收起的字体颜色可能设置无效,这个颜色会受colors.xml中的colorAccent影响

android 最上层权限

String ACTION_MANAGE_OVERLAY_PERMISSION = “android.settings.action.MANAGE_OVERLAY_PERMISSION”;

Intent intent = new Intent(ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse(“package:” + getPackageName()));

startActivityForResult(intent,5004);