Android TextView,autoLink =" all"将所有数字显示为可点击

时间:2014-05-30 14:50:14

标签: android textview

我有一个Scrollview,我的属性为android:clickable="true"android:autoLink="all"

我有一个ScrollView字符串,电子邮件,电话号码等出现并且可以正确点击。

但是,该字符串包含其他数字,例如年份,这些数字也显示为可点击,我不希望这样;我怎么能阻止这种情况发生?

1 个答案:

答案 0 :(得分:3)

请勿使用autoLink="all",请使用ones you need

android:autoLink="web|email|phone"可能会涵盖您的使用案例。

clickable="true"上的ScrollView并非此需要;相反,您应该在autoLink本身设置TextViews属性;如果您有其他常见属性,可能会提取样式。


将新的Linkify类添加到项目中。从您有权访问TextView的地方(例如活动):

TextView myTextView = // get a reference to your textview
int mask = Linkify.ALL;
Linkify.addLinks(myTextView, mask);

addLinks(TextView, int)方法是静态的,因此您可以在不创建Linkify实例的情况下使用它。返回值(boolean)表示某些内容是否已链接,但您可能不需要此信息,因此我们不会为此烦恼。

您需要确保不要将autoLink属性放在TextViews上,否则setText(...)实施仍会链接多年(除非您完全覆盖setText(...)实现而不调用super.setText(...)


对于额外的布朗尼点,您可以创建TextView的子类,当您在其上设置文本时,它将为您执行linkify:

public class AutoLinkifyTextView extends TextView {

    public AutoLinkifyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AutoLinkifyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setText(String text) {
        super.setText(text);
        parseLinks();
    }

    @Override
    public void setText(int stringRes) {
        super.setText(stringRes);
        parseLinks();
    }

    private void parseLinks() {
        Linkify.addLinks(this, Linkify.ALL);
    }

}

对于最高分,当然,你要从attrs读取属性,并使用XML属性中的正确掩码,但我更喜欢去掉那个选项并做到这一点这里。