Android开发之实现TextView文本点击响应
白羽 2018-06-27 来源 :网络 阅读 2968 评论 0

摘要:本文将带你了解Android开发之实现TextView文本点击响应,希望本文对大家学Android有所帮助。


超文本://www.baidu.com 

这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“//www.baidu.com” 并且要求红色字体的部分可以点击,有响应的点击事件进行处理,你该如何实现?

 Android开发之实现TextView文本点击响应

最简单的实现方法,两个TextView ,第一个显示黑色字体的“超文本”,第二个显示红色字体的“//www.baidu.com”,然给给第二个TextView添加一个点击事件。

想想,确实可以这么实现,对于一般情况可以

但是,文本长度过长的情况下呢,会出现第二个TextView未能一行显示的文本会换行,但是不是在第二行的一开始

 

  而你希望的效果是   

 

显然用两个TextView 不好实现,那么如果使用一个TextView实现一段文字,既可以有不同的颜色,也可以实现一段文字不同部分的文字有点击事件呢?

首先,我们必须知道SpannableString 类可以实现同一个TextView不同部分的颜色不同,

不会的可以先去学习下:(转) SpannableString与SpannableStringBuilder

既然我们知道了如何实现一个TextView显示不同的颜色,那么还有一个问题就是如何实现点击 同一个TextView不同部分的文字进行相应的响应操作

现在就学习:

ClickableSpan

源码很短,直接贴出,我加上个人翻译,大家看看吧:

 

/**

 * If an object of this type is attached to the text of a TextView

 * with a movement method of LinkMovementMethod, the affected spans of

 * text can be selected.  If clicked, the {@link #onClick} method will

 * be called.  
 如果这个TextView使用了.setMovementMethod()方法,那么这部分setSpan()的文本部分可以被选择,如果点击了,会执行onClick()接口回调方法

 */public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance {

    /**

     * Performs the click action associated with this span.

     */

    public abstract void onClick(View widget);  

    /**

     * Makes the text underlined and in the link color.

     */

    @Override

    public void updateDrawState(TextPaint ds) {

        ds.setColor(ds.linkColor);            //设置可以点击文本部分的颜色

        ds.setUnderlineText(true);            //设置该文本部分是否显示超链接形式的下划线

    }

}

 

可能有点看不懂,但是不用管,会怎么使用就行,那么怎么使用呢?

1、首先源码里说:

If an object of this type is attached to the text of a TextView

 * with a movement method of LinkMovementMethod,

那么:

对于一个TextView 先必须要使用  TextView.setMovementMethod(LinkMovementMethod.getInstance());

给一个TextView设置这个属性有什么用呢? 其实就是给这个TextView实现超链接效果,不设置当然就没有点击事件了

2、源码里又说:

the affected spans of

 * text can be selected.  If clicked, the {@link #onClick} method will

 * be called.  

那么就是说你setSpan()部分的文本可以显示,并且点击可以实现OnClick()接口回调

所以你需要写一个类来实现ClickableSpan 

并且  .setSpan(继承ClickableSpan的类,对应效果的开始位置,对应效果的结束位置, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);


让我们通过一个Demo来学习 ClickableSpan 的使用:

1、首选 自定义一个类继承ClickableSpan

 

class MyClickText extends ClickableSpan{

        private Context context;

 

        public MyClickText(Context context) {

            this.context = context;

        }

 

        @Override

        public void updateDrawState(TextPaint ds) {

            super.updateDrawState(ds);

            //设置文本的颜色            ds.setColor(Color.RED);

            //超链接形式的下划线,false 表示不显示下划线,true表示显示下划线

            ds.setUnderlineText(false);

        }

 

        @Override

        public void onClick(View widget) {

            Toast.makeText(context,"发生了点击效果",Toast.LENGTH_SHORT).show();

        }

    }

 

 

2、对TextView进行操作

 

     private TextView clicktext;

        clicktext = (TextView) findViewById(R.id.clicktext);

    

        SpannableString str = new SpannableString("超文本://www.baidu.com");

        str.setSpan(new MyClickText(this),4,str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

     //当然这里也可以通过setSpan来设置哪些位置的文本哪些颜色

        clicktext.setText(str);

        clicktext.setMovementMethod(LinkMovementMethod.getInstance());//不设置 没有点击事件

        clicktext.setHighlightColor(Color.TRANSPARENT); //设置点击后的颜色为透明

 

 

这个类到底有什么实际的使用呢?

在社交类APP中,一般都用类似QQ空间的功能吧,一个页面以列表的形式显示所有的动态(说说),每一个动态(说说)里又对应着相应的评论

 

 

    


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程