自定义TextView末尾增加高亮文字(ForegroundColorSpan)和点击事件(ClickableSpan)

一、自定义TextView实现增加高亮文字和点击事件
先看效果图如下:
在这里插入图片描述
详细描述是这样的:实现一个文本框,条件1:文本显示三行。条件2:文本超过三行时,在末尾显示省略号,并且在末尾展示“查看全部 >”按钮,高亮显示,并且可以点击跳转界面。条件3:文本三行能全部显示完整,则不展示“查看全部 >”按钮。
这个实现跟可扩展TextView的定义不一样,只需要实现末尾添加文字、图片、高亮、可点击即可。

当然难点是在:“查看全部 >”按钮,精确的显示在文本的最后面。所以计算需要展示的字符串长度,就是重点了。

二、直接看代码吧

class TextViewURLSpan extends ClickableSpan {
   
   
        @Override
        public void updateDrawState(TextPaint ds) {
   
   
            ds.setColor(Color.RED);
            ds.setUnderlineText(false); //去掉下划线
        }

        @Override
        public void onClick(View widget) {
   
   //点击事件
            widget.setSelected(false);
            Toast.makeText( MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
        }
    }
final String content = "赵丽颖,1987年10月16日出生于河北省廊坊市,中国内地女演员、歌手,河北省旅游形象大使。2006年,因获得《雅虎搜星》比赛冯小刚组冠军而进入演艺圈;同年,在冯小刚执导的广告片《跪族篇》中担任女主角。2011年,因在古装剧《新还珠格格》中饰演晴儿一角而被观众认识。2013年,凭借古装剧《陆贞传奇》获得更多关注。2014年10月,在第10届金鹰电视艺术节举办的投票活动中被选为“金鹰女神”";
        testTextview2 = findViewById(R.id.testTextview2);
        testTextview2.post(new Runnable() {
   
   

            @Override
            public void 
TextView增加点击效果可从为特定文本片段添加点击事件自定义末尾增加高亮文字点击事件两方面着手。 为TextView中的特定文本片段添加点击事件,可使用SpannableStringClickableSpan类实现。具体步骤为:创建SpannableString、定义带有点击事件的文本片段、将ClickableSpan应用到SpannableString,最后将配置好的SpannableString设置给TextView。这种方式能使文本的不同部分具有不同属性功能,增强用户交互体验,同时在处理动态文本时也需注意相关事项并优化点击区域 [^1]。 自定义TextView末尾增加高亮文字点击事件也能实现点击效果。要实现一个文本框,文本显示三行,当文本超过三行时,在末尾显示省略号,并展示高亮的“查看全部 >”按钮,该按钮可点击跳转界面;若文本三行能全部显示完整,则不展示“查看全部 >”按钮 [^2]。 以下为简单示例代码,展示如何为特定文本片段添加点击事件: ```java import android.graphics.Color; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.textView); String fullText = "这是一段示例文本,点击这里有效果"; SpannableString spannableString = new SpannableString(fullText); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { // 处理点击事件 } @Override public void updateDrawState(android.text.TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.BLUE); ds.setUnderlineText(false); } }; int startIndex = fullText.indexOf("点击这里"); int endIndex = startIndex + "点击这里".length(); spannableString.setSpan(clickableSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(spannableString); textView.setMovementMethod(LinkMovementMethod.getInstance()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值