java文字点击响应,TextView文字多种颜色,多种字号,不同颜色点击响应不同事件...

AAffA0nNPuCLAAAAAElFTkSuQmCCpackage 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 str_list;

private ArrayList color_list;

private ArrayList 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();

color_list = new ArrayList();

text_size_list = new ArrayList();

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 str, ArrayList color,

ArrayList text_size_list, ClickListener clickListener) {

// 累加数组所有的字符串为一个字符串

StringBuffer long_str = new StringBuffer();

for (int i = 0; i 

long_str.append(str.get(i));

}

SpannableString builder = new SpannableString(long_str.toString());

// 设置不同字符串的点击事件

for (int i = 0; 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 foregroundColorSpans = new ArrayList();

for (int i = 0; i 

foregroundColorSpans.add(new ForegroundColorSpan(color.get(i)));

}

for (int i = 0; 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 absoluteSizeSpans = new ArrayList();

for (int i = 0; i 

absoluteSizeSpans.add(new AbsoluteSizeSpan(sp2px(context,

text_size_list.get(i))));

}

for (int i = 0; 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值