【问题标题】:Highlight on clickablespan click突出显示可点击跨度点击
【发布时间】:2011-08-01 12:48:31
【问题描述】:

我有一点问题,我需要在点击 clickablespan 时移除或自定义这个橙色高亮。这是我的类扩展 ClickableSpan

public class InternalClickableSpan extends ClickableSpan {

    private String clicked;

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setUnderlineText(false);
    }

    public InternalClickableSpan(String clickedString) {
        clicked = clickedString;
    }

    @Override
    public void onClick(View view) {
        Selection.setSelection((Spannable) ((TextView)view).getText(), 0);
        Toast toast = Toast.makeText(mContext, clicked, Toast.LENGTH_SHORT);
        toast.show();
    }
}

这就是我在文本视图中使用它的方式

Spannable spans = (Spannable) tv.getText();      
spans.setSpan(new InternalClickableSpan(contacts[i]), text.indexOf(contacts[i]),   text.indexOf(contacts[i])+contacts[i].length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

有人知道如何在可跨对象上自定义“点击突出显示”吗?

编辑:感谢 Aleadam 的回复,我正在覆盖 updateDrawState(请查看我的 InternalClickableSpan 类中的第一个方法),但无论如何我都找不到自定义此亮点的方法。有人有其他想法吗?谢谢

【问题讨论】:

  • 尝试覆盖 updateDrawState()? developer.android.com/reference/android/text/style/…
  • @Aleadam 感谢您的回复,我正在覆盖 updateDrawState(请查看我的 InternalClickableSpan 类中的第一个方法),但无论如何我都找不到自定义此亮点的方法。有人有其他想法吗?谢谢
  • 想我明白了,要禁用高亮,我们需要在 TextView 上设置 setHighlightColor(Color.TRANSPARENT) 方法
  • 你找到解决办法了吗?

标签: android highlight


【解决方案1】:
textView.setText(myString);
Linkify.addLinks(textView,Linkify.ALL);

这对我有用。

【讨论】:

    【解决方案2】:

    您可以像这样覆盖onClick(View widget)

            @Override
            public void onClick(View widget) {
                // do what must happen after click event.
                widget.invalidate();
            }
    

    【讨论】:

    • 它对我有用。节省了大量时间。谢谢老哥!!
    • @hasanghaforian is Highlight for spannable strings 默认启用?
    • 感谢您的回答。但我工作时使用widget.postInvalidate()
    • @DIRTYDAVE 我碰巧它被突出显示了
    【解决方案3】:

    ClickableSpan linkClick = new ClickableSpan() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplicationContext(), "Link Click",
                    Toast.LENGTH_SHORT).show();
            view.invalidate();
        }
    
        @Override
        public void updateDrawState(TextPaint ds) {
            if (textView.isPressed()) {
                ds.setColor(Color.BLUE);
            } else {
                ds.setColor(Color.RED);
            }
            textView.invalidate();
        }
    };
    textView.setHighlightColor(Color.TRANSPARENT);
    
    Spannable spannableString = new SpannableString("Link in TextView");
    spannableString.setSpan(linkClick, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(spannableString, TextView.BufferType.SPANNABLE);
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    

    【讨论】:

    • 多点击跨度怎么样?
    • 它工作正常。但就像@ShihabUddin 说的那样,有没有办法在单个TextView 和多个ClickableSpans 上实现这一点?
    【解决方案4】:

    你可以替换默认的highlightColor android:textColorHighlight

        <TextView
        android:id="@+id/tv_tip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#727998"
        android:textColorHighlight="@android:color/transparent"
        tools:text="@string/_tip" />
    

    或禁用焦点

    【讨论】:

      【解决方案5】:

      这将删除所有突出显示。

      tv.setHighlightColor(Color.TRANSPARENT);
      

      【讨论】:

        【解决方案6】:
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout android:id="@+id/LinearLayout01"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            xmlns:android="http://schemas.android.com/apk/res/android">
        
            <LinearLayout android:id="@+id/LinearLayout02"
                android:layout_height="50px"
                android:layout_width="fill_parent"
                // Layout Click enable
                android:clickable="true"
                // Setting Highlight Option in background property
                android:background="@android:drawable/list_selector_background" />
            </LinearLayout>
        </LinearLayout>
        

        【讨论】:

        • 查看the help了解如何在编辑器中格式化代码
        【解决方案7】:

        就用这个吧..

        view.setSelector(new ColorDrawable(Color.TRANSPARENT));
        

        【讨论】:

        • 这仅用于列表视图
        猜你喜欢
        • 2017-07-06
        • 2017-05-20
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 2012-09-28
        • 2010-10-23
        • 1970-01-01
        相关资源
        最近更新 更多