将 TextView 格式化为看起来像链接的样式

13 浏览
0 Comments

将 TextView 格式化为看起来像链接的样式

我已经成功使用 android:autoLink 来格式化链接等内容,但我需要使用 android:onClick,所以在这种情况下无法使用它。我的原因是我发现,不小心点击电话号码太容易了,所以我要拦截点击事件并使用确认 Dialog,然后才会拨号。

有没有简单的方法可以让我的 TextView 中的电话号码看起来像普通可点击的链接?我在 Android 源代码中搜索了一下,但找不到我要引用的特定样式。

admin 更改状态以发布 2023年5月21日
0
0 Comments

    \n

  • 您可以创建一个名为colors.xml的资源文件,其中包含颜色。请看颜色
  • \n

  • 如果您想要给文本加下划线,请看这篇文章:Underline
  • \n

  • 别忘了给您的TextView添加android:clickable=\"true\"setClickable(true)使它们可点击!
  • \n

0
0 Comments

这是最简短的解决方案:

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

可悲的是,单击效果并未出现为单击真实url链接,但您可以通过以下方式克服这个问题:

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

另一种解决方案是使用Html.fromHtml(...),其中内部文本具有链接标签("")。

如果您希望获取其他解决方案,请查看此帖子

0