TextView 高亮字体局部点击
Posted dx我是大雄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TextView 高亮字体局部点击相关的知识,希望对你有一定的参考价值。
如题 点击TextView中的某个高亮区域响应点击事件
简单的封装了下,成下面几个类
CommonUtil.java
public class CommonUtil
/**
* Fistly before call this method you should below method first to make sure no backgroud color
* when you click
* textView.setHighlightColor(getResources().getColor(android.R.color.transparent));
*
* finally dont forget to call below to make sure click enable
* textView.setMovementMethod(LinkMovementMethod.getInstance());
*
* */
public static SpannableString generateAreaClickString(View.OnClickListener onClickListener ,String completeStr, String highLightStr, Context context,boolean needUnderLine)
if(completeStr != null && !completeStr.equals(""))
SpannableString spanableInfo = new SpannableString(completeStr);
int index = completeStr.lastIndexOf(highLightStr);
if(index != -1)
spanableInfo.setSpan(new SpanAreaClick(onClickListener, context,needUnderLine),index,index+highLightStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanableInfo;
return null;
SpanAreaClick.java
public class SpanAreaClick extends ClickableSpan
private final View.OnClickListener mListener;
private Context mContext;
private boolean mNeedUnderLine;
public SpanAreaClick(View.OnClickListener l, Context context ,boolean needUnderLine)
mListener = l;
mContext = context;
mNeedUnderLine = needUnderLine;
@Override
public void onClick(View v)
mListener.onClick(v);
@Override
public void updateDrawState(TextPaint ds)
ds.setColor(mContext.getResources().getColor(R.color.colorPrimary));
ds.setUnderlineText(mNeedUnderLine);
MainActivity.java
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView=(TextView) findViewById(R.id.tv_content);
// to make sure no backgroud color when click
textView.setHighlightColor(getResources().getColor(android.R.color.transparent));
SpannableString spanableInfo = CommonUtil.generateAreaClickString(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this, "super man", Toast.LENGTH_SHORT).show();
,"Hello I am super . How are you doing.","super",MainActivity.this,true);
textView.setText(spanableInfo);
// to make sure clickable
textView.setMovementMethod(LinkMovementMethod.getInstance());
以上是关于TextView 高亮字体局部点击的主要内容,如果未能解决你的问题,请参考以下文章
spnnableBuilder 实现Android 表情 高亮字体 及 点击事件