TextView 高亮字体局部点击

如题  点击TextView中的某个高亮区域响应点击事件

TextView 高亮字体局部点击_第1张图片


简单的封装了下,成下面几个类


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());
    }


}










你可能感兴趣的:(android问题)