如题 点击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());
}
}