Android TextView 给文本中指定片段添加自定义点击事件

本文介绍如何在Android应用中实现点击事件触发文本显示翻转,包括使用自定义点击Span来控制文本显示效果,以及设置文本颜色、链接跳转等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://zeroblue.iteye.com/blog/1564480


package com.example.androidtest;

import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;
import android.app.Activity;
import android.graphics.Color;

public class MainActivity extends Activity {
 private final String stringToShow = "123456789abcdefg...";
 private final String readMore = "Read More";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  TextView tv = (TextView) this.findViewById(R.id.tv);
  
  
  ClickableSpan clickableSpan = new ClickableSpan() {
   
   @Override
   public void onClick(View widget) {
    if (widget instanceof TextView) {
     ((TextView) widget).setText(stringToShow + stringToShow);
    }
   }
   
   @Override
   public void updateDrawState(TextPaint ds) {
    super.updateDrawState(ds);
    
    ds.setUnderlineText(false);
   }
  };
  
  setClickableSpanForTextView(tv, clickableSpan, stringToShow + readMore,
    stringToShow.length(),
    stringToShow.length() + readMore.length());

 }

 /**
  *
  * @param tv
  *            TextView
  * @param clickableSpan
  *            Click event
  * @param text
  *            Text to show
  * @param start
  *            Start point in text for handle click event
  * @param end
  *            End point in text for handle click event
  */
 private void setClickableSpanForTextView(TextView tv, ClickableSpan clickableSpan, String text, int start, int end) {
  SpannableString sp = new SpannableString(text);
  sp.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  tv.setText(sp);
  tv.setLinkTextColor(Color.RED);
  tv.setMovementMethod(LinkMovementMethod.getInstance());
  tv.setFocusable(false);
  tv.setClickable(false);
  tv.setLongClickable(false);
 }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值