转载自:http://www.apkbus.com/blog-160625-59265.html
package com.example.fortextdemo;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements ClickListener {
private TextView textView1;
private ArrayList<String> str_list;
private ArrayList<Integer> color_list;
private ArrayList<Float> text_size_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setData();
}
private void initView() {
textView1 = (TextView) findViewById(R.id.textView1);
}
private void setData() {
str_list = new ArrayList<String>();
color_list = new ArrayList<Integer>();
text_size_list = new ArrayList<Float>();
str_list.add("今天");
str_list.add("天气");
str_list.add("还不错!");
color_list.add(Color.RED);
color_list.add(Color.GREEN);
color_list.add(Color.BLUE);
text_size_list.add(15f);
text_size_list.add(17f);
text_size_list.add(20f);
Util.setText(this, textView1, str_list, color_list, text_size_list,
this);
}
@Override
public void click(int position) {
Log.e("position", position + "");
Toast.makeText(this, str_list.get(position), Toast.LENGTH_SHORT).show();
}
}
package com.example.fortextdemo;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class Util {
public static void setText(Context context, TextView tv,
ArrayList<String> str, ArrayList<Integer> color,
ArrayList<Float> text_size_list, ClickListener clickListener) {
// 累加数组所有的字符串为一个字符串
StringBuffer long_str = new StringBuffer();
for (int i = 0; i < str.size(); i++) {
long_str.append(str.get(i));
}
SpannableString builder = new SpannableString(long_str.toString());
// 设置不同字符串的点击事件
for (int i = 0; i < str.size(); i++) {
int p = i;
int star = long_str.toString().indexOf(str.get(i));
int end = star + str.get(i).length();
builder.setSpan(new Clickable(clickListener, p), star, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
// 设置不同字符串的颜色
ArrayList<ForegroundColorSpan> foregroundColorSpans = new ArrayList<ForegroundColorSpan>();
for (int i = 0; i < color.size(); i++) {
foregroundColorSpans.add(new ForegroundColorSpan(color.get(i)));
}
for (int i = 0; i < str.size(); i++) {
int star = long_str.toString().indexOf(str.get(i));
int end = star + str.get(i).length();
builder.setSpan(foregroundColorSpans.get(i), star, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
// 设置不同字符串的字号
ArrayList<AbsoluteSizeSpan> absoluteSizeSpans = new ArrayList<AbsoluteSizeSpan>();
for (int i = 0; i < color.size(); i++) {
absoluteSizeSpans.add(new AbsoluteSizeSpan(sp2px(context,
text_size_list.get(i))));
}
for (int i = 0; i < str.size(); i++) {
int star = long_str.toString().indexOf(str.get(i));
int end = star + str.get(i).length();
builder.setSpan(absoluteSizeSpans.get(i), star, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
// 设置点击后的颜色为透明,否则会一直出现高亮
tv.setHighlightColor(Color.TRANSPARENT);
tv.setClickable(true);
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(builder);
}
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}
class Clickable extends ClickableSpan implements OnClickListener {
private final ClickListener clickListener;
private int position;
public Clickable(ClickListener clickListener, int position) {
this.clickListener = clickListener;
this.position = position;
}
@Override
public void onClick(View v) {
clickListener.click(position);
}
@Override
public void updateDrawState(TextPaint ds) {
// TODO Auto-generated method stub
super.updateDrawState(ds);
ds.setColor(Color.WHITE); // 设置文件颜色
ds.setUnderlineText(false);
}
}
源码下载地址:http://www.apkbus.com/android-245433-1-1.html
- Android TextView部分文字实现点击事件
This is the class for text whose content and markup can both be changed. (这是一个内容和标记都可以更改的文本类) 快速实现 直 ...
- DevExpress的图形按钮菜单栏控件WindowsUIButtonPanel的布局、使用和设置按钮的点击事件
场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...
- 【百度统计】设置页面元素点击事件转化pv、uv
html元素点击事件内添加代码:_hmt.push(['_trackEvent', category, action, opt_label, opt_value]); 1. '_trackEvent' ...
- Android TextView中链接(link)点击事件的截取
布局文件xml <TextView package com.jayce.testlink; import android.net.Uri; import android.os.Bundle; i ...
- html,js一个元素做两次不同点击事件
业务需求:一个按钮,第一次点击,修改页面内容,第二次点击,提交修改. 刚开始,我绑定了第一个click事件,用于让右边的内容可编辑.如:$('#id').click(function(){...}); ...
- 22 Notification样式设置内部按钮点击事件
package com.exam1ple.demo1; import android.app.Activity; import android.app.NotificationManager; imp ...
- RecyclerView的点击事件
RecyclerView 一.简单介绍 这个是谷歌官方出的控件.使我们能够很easy的做出列表装的一个控件,当然recyclerview的功能不止这些,它还能够做出瀑布流的效果,这是一个很强大的控件, ...
- android中的4种点击事件
四种点击事件 (1)采用内部类的方式去实现OnClickListener (2)匿名内部类 (3)当前类imp OnClickListener (4)onclick ...
- 四种方式写按钮点击事件和Android 中常用的布局
1.匿名内部类的方式 2.创建一个类实现onClickListener,实现onClick方法,设置控件点击时传一个类的对象 3.让当前类实现onClickListener,设置控件点击事件时传递一个 ...
随机推荐
- 彻底搞懂spark的shuffle过程(shuffle write)
什么时候需要 shuffle writer 假如我们有个 spark job 依赖关系如下 我们抽象出来其中的rdd和依赖关系: E <-------n------, ...
- VSCode 配置并使用less
1.安装node.js 2.安装less npm install less -g 3.安装VS插件 Easy LESS 4.编辑保存.less文件,会在对应的目录下生成对应的.css文件
- Quick Sort(三向切分的快速排序)(Java)
//三向切分的快速排序 //这种切分方法对于数组中有大量重复元素的情况有比较大的性能提升 public static void main(String[] args) { Scanner input ...
- SpringMVC 框架介绍以及环境搭建
目录 前端设计模式介绍 分析前端设计模式 Spring MVC简单介绍 Spring和Spring MVC的关系 配置Spring MVC的环境并简单测试 前端设计模式介绍 前端设计模式其实和前端没啥 ...
- JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值
JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值 //************************* 把数字金额转换成中文大写数字的函数(可处理负值) ****************** ...
- [转帖]EXPDP dumpfile和parallel的关系
http://blog.itpub.net/28602568/viewspace-2133375/ 转帖 EXPDP 里面 parallel 与 dumpfile 里面的文件数的关系. 但是我这里有一 ...
- jQuery 源码学习 - 01 - 简洁的 $('...')
首先贴上学习参考资料:[深入浅出jQuery]源码浅析--整体架构,备用地址:chokcoco/jQuery-. jQuery 库,js 开发的一个里程碑,它的出现,让网页开发者们告别荒蛮的上古时代, ...
- dataframe常用处理
获取列名:data.columns.values.tolist() 复制列: out['serial_number'] = out['2']这样就是新增了一列,复制了‘2’这一列,然后再del out ...
- Python实现FTP文件的上传和下载
# coding: utf-8 import os from ftplib import FTP def ftp_connect(host, username, password): ftp = FT ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...