Android自己定义无下划线ClickableSapn超链接文本样式
近期在做评论的时候须要实现这样的效果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamF2X2ltYmE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">网上百度了一下,就是自己定义一个类继承4ClickableSpan,然后在updateDrawState方法中设置是否下划线为false,可是看了一下网上实现的方法是直接在新类的OnClick方法中实现onClick操作,感觉不太easy扩展使用,于是我自己定义了一个接口,通过接口实现了外部代码调用。详细代码例如以下:
public class NoLineClickableSpan extends ClickableSpan{
	private IOnNoLineTextClick iOnNoLineTextClick;
	public NoLineClickableSpan() {
		super();
	}
	@Override
	public void updateDrawState(TextPaint ds) {
		ds.setColor(ds.linkColor);
		ds.setUnderlineText(false);
	}
	@Override
	public void onClick(View widget) {
		iOnNoLineTextClick.onClick();
	}
	public void setOnNoLineTextClick(IOnNoLineTextClick i){
		iOnNoLineTextClick = i;
	}
	public interface IOnNoLineTextClick{
		public void onClick();
	}
}
XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/tv_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="小西回复大东方:你是个大大大的好好人" /> </RelativeLayout>
MainActivity调用代码例如以下:
public class MainActivity extends Activity {
	private TextView tv_test;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView() {
    	tv_test = (TextView) findViewById(R.id.tv_test);
    	tv_test.setMovementMethod(LinkMovementMethod.getInstance());
    	SpannableString spanString = new SpannableString(tv_test.getText().toString());
    	NoLineClickableSpan span = new NoLineClickableSpan();
    	span.setOnNoLineTextClick(new IOnNoLineTextClick() {
			@Override
			public void onClick() {
				System.out.println("点击用户");
			}
		});
		spanString.setSpan(span, 0, 2, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
		tv_test.setText(spanString);
	}
}
当中spanString.setSpan(span,0,2,SpannableString.SPAN_EXCLUSIVE_EXCLUSIZE); 0,2 分别代表超链接字体的開始位置和结束位置,我这里取2,当点击小西时执行结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamF2X2ltYmE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Android自己定义无下划线ClickableSapn超链接文本样式的更多相关文章
- html初始化页面和a标签无下划线
		body, div, p, h1, h2, h3, h4, h5, h6, ul, ol, li, dl, dd, dt, img, form { padding:0px; margin:0px; b ... 
- React-Native 之 GD (二十)removeClippedSubviews / modal放置的顺序 / Android 加载git图\动图 / 去除 Android 中输入框的下划线 / navigationBar
		1.removeClippedSubviews 用于提升大列表的滚动性能.需要给行容器添加样式overflow:’hidden’.(Android已默认添加此样式)此属性默认开启 这个属性是因为在早期 ... 
- Android TextView中实现点击文本超链接(无下划线)的封装类
		android中有的时候须要在TextView上设置一些超链接,点击这些超链接时进行一些操作.比如新浪微博上的一些keyword,点击时会跳转到对应的页面. 怎样实现我们就直接看源代码吧. /** * ... 
- Android 如何自定义EditText 下划线?
		项目要求: 笔者曾经做过一个项目,其中登录界面的交互令人印象深刻.交互设计师给出了一个非常作的设计,要求做出包含根据情况可变色的下划线,左侧有可变图标,右侧有可变删除标志的输入框,如图 记录制作过程: ... 
- Android  给EditText添加下划线
		在安卓高版本,默认是有下划线的,其默认下划线的颜色是由其主题颜色来控制的! 控制如下: <style name="AppTheme" parent="Theme.A ... 
- android里TextView加下划线的几种方式
		如果是在资源文件里: <resources> <string name="hello"><u>phone:0123456</u>&l ... 
- Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
		开发中遇到了一个问题,Tablayout设置下换线长度,看了点资料,分享给大家. 效果图: 直接贴代码(要在tabLayout添加完所有的tab后调用) public vo ... 
- 解决<a>文本本身带下划线和超链接下划线重合的问题
		<a style="padding-bottom: 1PX;border-bottom: 1PX #254fc5 solid;text-decoration: none;"& ... 
- 在HTML中怎么去掉a标签(超链接)的下划线?
		<style type="text/css">a:link,a:visited{ text-decoration:none; /*超链接无下划线*/}a:hover{ ... 
随机推荐
- $.fn.extend的用法
			$.fn.extend({ sfMessages: function(m) { $("p.tips").html('<span class="circle ioc ... 
- node 转二进制 图片
			'use strict';const Service = require('egg').Service;const fs = require('fs');const path = require('p ... 
- MySQL主从复制遇到的问题
			show slave status\G时,io显示:Slave_IO_State: Connecting 1.检查网络是否畅通,方法:ping主机ip.主机通畅. 2.检查复制用户的账号密码是否正确. ... 
- 查看FPM在你的机子上的平均内存占用情况
			ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n" ... 
- time | sys | os 模块,递归删除文件,项目分析
			一,复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块 ... 
- 选项B中:int b[][3]={0,1,2,3}
			选项B中:int b[][3]={0,1,2,3};等价于 int b[][3]={0,1,2,3,0,0}; int b[][3]={0,1,2,3,4}; cout<& ... 
- 集训第六周 古典概型 期望 D题 Discovering Gold  期望
			Description You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell o ... 
- 【分治】输出前k大的数
			描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入第一行包含一个整数n,表示数组的大小.n < 100000.第二行包含n个整数,表示数组的元素,整数之间以一个空格分开.每个整 ... 
- 【转】SQLServer连接字符串配置:MultipleActiveResultSets
			ADO.NET 1.x 利用SqlDataReader读取数据,针对每个结果集需要一个独立的连接.当然,你还必须管理这些连接并且要付出相应的内存和潜在的应用程序中的高度拥挤的瓶颈代价-特别是在数据集中 ... 
- JavaEE JDBC 补充注意点
			JDBC补充注意点 @author ixenos 1.一个Statement对象可以用于多个不相关的命令和查询,但是一个Statement对象最多只能有一个打开的结果集,如果需要同时执行多个查询同时分 ... 
