我在aap中使用了一个文本视图,它有平面文本和超链接。现在当我点击超链接然后用默认浏览器链接打开。但实际上我不想打开默认浏览器。实际上我想在超链接上注册OnClickListener并想要执行其他操作。
我在互联网上搜索,我得到了这个解决方案......
Control onclicklistener in autolink enabled textview
但这对我没有帮助。
任何人都可以告诉我如何执行此操作。
提前致谢
答案 0 :(得分:1)
您可以使用Spannable
对象
final Spannable span = new SpannableString(text);
span.setSpan(new ClickableSpan() {
@Override
public void onClick(View v) {
}
}, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
其中text是您的超链接
答案 1 :(得分:1)
删除android:autoLink =" web"如果此属性设置为XML。
TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
当您想在浏览器中打开时使用此代码
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));
如果你想执行一些操作注册onclick listener for textview并执行。
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
答案 2 :(得分:1)
尝试执行此操作添加 在你的 的 main.xml中强>
<TextView
android:id="@+id/yourTVID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="performSomeAction" />
SomeActivity.java 中的
public void performSomeAction( View v){
//Perform your action
}
答案 3 :(得分:1)
试试这个,它应该可以解决你的问题。此方法将返回一个Spannable String,其中有一部分可单击。
在调用下面的方法之前,你应该从String中创建CharSequence然后将其转换为Spannable
CharSequence charSequencce = testView.getText();
Spannable spannable = (Spannable) charSequencce;
public SpannableStringBuilder addClickToPartsOfString(Spannable charSequence, String[] stringsToAddClick, final OnHyperLinkClickListener onClickListener) {
SpannableStringBuilder ssb = new SpannableStringBuilder(charSequence);
for(final String s : stringsToAddClick) {
int index1 = charSequence.toString().indexOf(s);
int index2 = (s.length() + index1);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
onClickListener.onClick(s);
}
}, index1, index2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ssb;
}
答案 4 :(得分:0)
我刚刚建立了一个旨在简化这一过程的图书馆。见Textoo。您可以使用以下代码实现相同的目标:
TextView locNotFound = Textoo
.config((TextView) findViewById(R.id.view_location_disabled))
.addLinksHandler(new LinksHandler() {
@Override
public boolean onClick(View view, String url) {
if ("internal://settings/location".equals(url)) {
Intent locSettings = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(locSettings);
return true;
} else {
return false;
}
}
})
.apply();
在内部,库将textview / string资源中的现有链接(android系统将字符串资源中的html链接解析为Span)转换为自定义ClickableSpan
,并将点击次数转换为对处理程序的调用。
这使您无需计算和硬编码可点击跨度的位置即可添加。因此,可以更轻松地将文本外部化为字符串资源,并更好地进行本地化。