在我们的应用中,我们希望通过使用文本绘制自定义视图来提高滚动速度。问题是没有点击ClickableSpan。对于TextView,我们可以使用
textView.setMovementMethod(LinkMovementMethod.getInstance());
但是,如何在自定义视图中进行链接点击工作呢?
public class AutoLinkTextView extends View {
private static final String TAG = "AutoLinkTextView";
private StaticLayout staticLayout;
public AutoLinkTextView(Context context) {
super(context);
initializeViews();
}
public AutoLinkTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initializeViews();
}
public AutoLinkTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initializeViews();
}
private void initializeViews() {
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(55);
textPaint.setAntiAlias(true);
textPaint.setColor(Color.GRAY);
textPaint.linkColor = Color.RED;
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
URLSpan urlSpan = new URLSpan( "http://google.com" )
{
@Override
public void onClick( View widget )
{
Intent i = new Intent( Intent.ACTION_VIEW );
i.setData( Uri.parse( getURL() ) );
getContext().startActivity( i );
}
};
wordtoSpan.setSpan(urlSpan, 19, 26, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
staticLayout = new StaticLayout(wordtoSpan, textPaint, 1300, Layout.Alignment.ALIGN_CENTER, 1, 1, true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
staticLayout.draw(canvas);
TextView textView = new TextView();
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), staticLayout.getHeight());
}
}
答案 0 :(得分:0)
试试这个:
这是我的示例代码
textView.setText(addClickablePart(), TextView.BufferType.SPANNABLE);
private SpannableStringBuilder addClickablePart() {
String str = "I know just how to whisper, And I know just how to cry,I know just where to find the answers. Click Me";
SpannableStringBuilder ssb = new SpannableStringBuilder(str);
final ForegroundColorSpan fcs = new ForegroundColorSpan(ContextCompat.getColor(AppController.getContext(), R.color.dark_green));
final String clickString = "Click Me";
int idx1 = str.indexOf(clickString);
int idx2 = str.length() - 1;
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, clickString,
Toast.LENGTH_SHORT).show();
}
}, idx1, idx2, 0);
ssb.setSpan(fcs, idx1, idx2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
return ssb;
}