我有一个Scrollview,我的属性为android:clickable="true"
和android:autoLink="all"
。
我有一个ScrollView字符串,电子邮件,电话号码等出现并且可以正确点击。
但是,该字符串包含其他数字,例如年份,这些数字也显示为可点击,我不希望这样;我怎么能阻止这种情况发生?
答案 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属性中的正确掩码,但我更喜欢去掉那个选项并做到这一点这里。