我一直在使用android:autoLink正常的格式化链接等,但我需要使用android:onClick所以我不能在这种情况下使用它.原因是我发现不小心点击电话号码太容易了,所以我打算用确认拦截点击Dialog然后再打电话.
是否有一种简单的方法可以让我TextView看起来像普通的可点击链接?我探索了Android源代码,但找不到任何特定的风格供我参考.
and*_*per 10
这是最短的解决方案:
final CharSequence text = tv.getText();
final SpannableString spannableString = new SpannableString( text );
spannableString.setSpan(new URLSpan(""), 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(spannableString, TextView.BufferType.SPANNABLE);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,点击的效果并没有显示为点击真实的网址链接,但你可以像这样克服它:
final CharSequence text = tv.getText();
final SpannableString notClickedString = new SpannableString(text);
notClickedString.setSpan(new URLSpan(""), 0, notClickedString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(notClickedString, TextView.BufferType.SPANNABLE);
final SpannableString clickedString = new SpannableString(notClickedString);
clickedString.setSpan(new BackgroundColorSpan(Color.GRAY), 0, notClickedString.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
tv.setText(clickedString);
break;
case MotionEvent.ACTION_UP:
tv.setText(notClickedString, TextView.BufferType.SPANNABLE);
v.performClick();
break;
case MotionEvent.ACTION_CANCEL:
tv.setText(notClickedString, TextView.BufferType.SPANNABLE);
break;
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是使用Html.fromHtml(...),其中里面的文本有链接标记("").
如果您想要其他解决方案,请查看此帖子.
| 归档时间: |
|
| 查看次数: |
13483 次 |
| 最近记录: |