在安卓开发中我们需要利用TextView实现各种各样的文字展示效果,这里记录常用的几种利用TextView对文字的处理。效果图:
一、利用TextView的ellipsize属性实现跑马灯轮播效果
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="中国民营企业500强发布,华为超联想夺第一中国民营企业500强发布,华为超联想夺第一" />
二、借助自定义控件MarqueeView实现竖向轮播
<com.liuxingyu.textview.MarqueeView
android:id="@+id/marqueeview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/bg_marqueeview"
app:itemAnimationTime="700"
app:paddingLeft="10dp"
app:paddingTopBottom="15dp"
app:reRepeatDelayTime="1000"
app:startDelayTime="500"
app:textColor="#333333"
app:textSize="16sp" />
//竖向轮播
void VerticalMarqueeView() {
marqueeView.setTextArray(contentArray);
marqueeView.setOnItemClickListener(new MarqueeView.onItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, contentArray[position], Toast.LENGTH_SHORT).show();
}
});
}
三、协议点击效果(SpannableString)
这个是根据文字动态计算的,对各种各样的都能够处理的得心应手,缺点是利用TextView的SpannableString实现点击事件就是文字本身,点击范围较小。
//协议点击效果(SpannableString)
void SpannableString() {
SpannableString spanText = new SpannableString("《协议1》、《协议2》、《协议3》、《协议4》");
spanText.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.RED); //设置文件颜色
ds.setUnderlineText(false); //设置下划线
}
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "《协议1》", Toast.LENGTH_SHORT).show();
}
}, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanText.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.RED); //设置文件颜色
ds.setUnderlineText(false); //设置下划线
}
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "《协议2》", Toast.LENGTH_SHORT).show();
}
}, 6, 11, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv_agreement.setHighlightColor(Color.TRANSPARENT); //设置点击后的颜色为透明,否则会一直出现高亮
tv_agreement.setText(spanText);
tv_agreement.setMovementMethod(LinkMovementMethod.getInstance());//开始响应点击事件
}
四、图文混排效果(SpecialStringBuilder)
这里使用的SpecialStringBuilder对文字进行处理,样式相对来说会更多一点
```java
//图文混排效果(SpecialStringBuilder)
void SpannableStringBuilder() {
SpecialStyle style = new SpecialStyle();
SpecialStringBuilder sb = new SpecialStringBuilder();
style.setColor(Color.RED);
style.setBackgroundColor(Color.WHITE);
style.setClickable(new ClickableStyle.OnClick() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
}
});
style.clearUnderLine();
style.clearStrikethrough();
sb.append("白底红字", style);
style.clearColor();
sb.append("红底正常文字", style);
style.setColor(Color.WHITE);
style.setClickable(new ClickableStyle.OnClick() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
}
});
style.setBackgroundColor(Color.BLUE);
sb.append("可以点击事件的蓝底文字", style);
style.clearStyles()
.setImage(new ImageSpan(this, R.mipmap.ic_launcher), false);
sb.append("变成图片的文字", style);
style.setUnderLine(false);
sb.append("下划线的文字", style);
style.setStrikethrough(false);
sb.append("删除线的文字", style);
style.clearStyles();
sb.append("普通的文字", style);
tv_specialStringBuilder.setText(sb.getCharSequence());
tv_specialStringBuilder.setMovementMethod(LinkMovementMethod.getInstance());
}
五、图文混排效果(HtmlString)
对于html基础还记得的同学建议使用,样式相对来说最全面。当然也可以考虑使用WebView控件。
//图文混排效果(HtmlString)
void htmlString() {
tv_html.setText(Html.fromHtml(HTML_TEXT));
}