
转载自: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,设置控件点击事件时传递一个 ...
随机推荐
- 随心测试_职场面试_001<SX的面试观点>
快速理解_求职面试:必不可少的嘴 + 双向沟通交流 = 人与人之间的心理游戏 ps:以下为_面试题回答套路_案例,仅供参考,不挖坑 常见的面试题: 你是如何看待软件测试这个行业的? 说说你对软件测试 ...
- OpenStack端口(15)
一.OpenStack组件使用的默认端口号 openstack openstack service default ports port type keystone Identity service ...
- 工具(2): 极简MarkDown排版介绍(How to)
如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Editor 选择一个在线编辑和预览站点:StackEdit 如何排版章节 MarkDown: 大标题 ========== 小标 ...
- MySQL函数--(1)
/*函数与存储过程的区别1.存储过程:可以有0个返回值,可以有多个返回值函数:有且仅有一个返回值*/ #创建语法create FUNCTION 函数名(参数列表) return 返回类型BEGIN函数 ...
- flutter 监听返回键
### 监听手机返回键(双击退出) ``` import 'package:fluttertoast/fluttertoast.dart'; //提示插件 class WillPopScopeTest ...
- Linux安装Kafka
https://blog.csdn.net/qq_33257527/article/details/85227478 https://jingyan.baidu.com/article/36d6ed1 ...
- array数组(n,1)和(n,)互相转换
data.shape #(172,1) result = [arr[0] for arr in data] result.shape #(172,) (172,1)表示是一个(172,1)shape大 ...
- MySQL——合并查询结果
利用 UNION 关键字,可以给出多条 SELECT 语句,并将它们的结果组合成一个结果集.合并时,两个表对应的列数和数据类型必须相同.SELECT 语句之间使用 UNION 或 UNIO ...
- CentOS7切换源
1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...
- syntax error near unexpected token `$'\r''
这种情况发生的原因是因为你所处理的文件换行符是dos格式的"\r\n"可以使用cat -v 文件名 来查看换行符是否是,如果是上述的,则行结尾会是^m需要转换成linux/unix ...