Ric*_*ard 950 android hyperlink textview clickable
我定义了以下TextView:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtCredits"
android:autoLink="web" android:id="@+id/infoTxtCredits"
android:layout_centerInParent="true"
android:linksClickable="true"></TextView>
Run Code Online (Sandbox Code Playgroud)
where @string/txtCredits
包含的字符串资源<a href="some site">Link text</a>
.
Android正在突出显示TextView中的链接,但它们不响应点击.有人能告诉我我做错了什么吗?我是否必须在我的活动中为TextView设置onClickListener,这对于这么简单?
看起来它与我定义字符串资源的方式有关.这不起作用:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Run Code Online (Sandbox Code Playgroud)
但这样做:
<string name="txtCredits">www.google.com</string>
Run Code Online (Sandbox Code Playgroud)
这是一个无赖,因为我宁愿显示文本链接而不是显示完整的URL.
Ric*_*ard 1194
在API演示中,我找到了解决问题的方法:
Link.java:
// text2 has links specified by putting <a> tags in the string
// resource. By default these links will appear but not
// respond to user input. To make them active, you need to
// call setMovementMethod() on the TextView object.
TextView t2 = (TextView) findViewById(R.id.text2);
t2.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
我删除了TextView上的大多数属性以匹配演示中的属性.
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txtCredits"/>
Run Code Online (Sandbox Code Playgroud)
这解决了它.很难发现和修复.
重要提示:autoLink="web"
如果您打电话,请不要忘记删除setMovementMethod()
.
Jan*_*usz 511
我只使用android:autoLink="web"
它,它工作正常.单击该链接可打开浏览器并显示正确的页面.
我可以猜到的一件事是其他一些观点在链接之上.透明的东西填充整个父母,但不显示链接上方的任何内容.在这种情况下,单击将转到此视图而不是链接.
Jes*_*run 347
花了一些时间,我发现:
android:autoLink="web"
如果你的HTML中有完整的链接,则有效.以下内容将以蓝色突出显示并可单击:
- 一些文字
<a href="http://www.google.com">http://www.google.com</a>
- 一些文字
http://www.google.com
view.setMovementMethod(LinkMovementMethod.getInstance());
将使用以下内容(将突出显示并可单击):
- 一些文字
<a href="http://www.google.com">http://www.google.com</a>
- 一些文字
http://www.google.com
- 一些文字
<a href="http://www.google.com">Go to Google</a>
请注意,第三个选项具有超链接,但链接的描述(标记之间的部分)本身不是链接.android:autoLink="web"
确实不是这样的联系工作.
android:autoLink="web"
如果在XML中设置将覆盖view.setMovementMethod(LinkMovementMethod.getInstance());
(即;第三种类型的链接将突出显示,但不可点击).故事的寓意是view.setMovementMethod(LinkMovementMethod.getInstance());
在您的代码中使用,android:autoLink="web"
如果您希望所有链接都是可点击的,请确保您没有XML布局.
Bła*_*app 92
以上解决方案对我不起作用,但以下做了(而且看起来有点清洁).
首先,在字符串资源中,使用HTML实体编码定义标记打开的V形符号,即:
<a href="http://www.google.com">Google</a>
Run Code Online (Sandbox Code Playgroud)
并不是:
<a href="http://www.google.com">Google</a>
Run Code Online (Sandbox Code Playgroud)
通常,像这样编码字符串中的所有V形符号.顺便说一句,链接必须从http://
然后(如此处所示)在TextView上设置此选项:
android:linksClickable="true"
Run Code Online (Sandbox Code Playgroud)
最后,在代码中,执行:
((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));
Run Code Online (Sandbox Code Playgroud)
就是这样,不需要正则表达式或其他手动黑客攻击.
小智 64
我简单地使用了这个
Linkify.addLinks(TextView, Linkify.ALL);
Run Code Online (Sandbox Code Playgroud)
使链接可点击这里给出
viz*_*izZ 61
如果你想添加类似HTML的链接,你需要做的就是:
添加类似HTML的字符串:
<string name="link"><a href="https://www.google.pl/">Google</a></string>
Run Code Online (Sandbox Code Playgroud)将您的视图添加到布局中,根本没有特定于链接的配置:
<TextView
android:id="@+id/link"
android:text="@string/link" />`
Run Code Online (Sandbox Code Playgroud)以编程方式将适当的MovementMethod添加到TextView:
mLink = (TextView) findViewById(R.id.link);
if (mLink != null) {
mLink.setMovementMethod(LinkMovementMethod.getInstance());
}
Run Code Online (Sandbox Code Playgroud)而已!是的,像"autoLink"和"linksClickable"这样的选项只用于显式链接(不包含在html标签中)对我来说也是非常误导的......
Sha*_*waj 46
我将此行添加到TextView
:android:autoLink="web"
下面是布局文件中的用法示例.
layout.xml
样品
<TextView
android:id="@+id/txtLostpassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:autoLink="email"
android:gravity="center"
android:padding="20px"
android:text="@string/lostpassword"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/txtDefaultpassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:autoLink="web"
android:gravity="center"
android:padding="20px"
android:text="@string/defaultpassword"
android:textAppearance="?android:attr/textAppearanceSmall" />
Run Code Online (Sandbox Code Playgroud)
string.xml
<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>
<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
Run Code Online (Sandbox Code Playgroud)
小智 25
只需要在xml的文本视图中添加它
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"/>
Run Code Online (Sandbox Code Playgroud)
Beb*_*T.N 25
我希望这能帮到您;
String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
TextView text = (TextView) findViewById(R.id.text);
text.setText(Html.fromHtml(value));
text.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
Ase*_*rge 23
以下内容适用于在Android应用中寻找文本和超链接组合的任何人.
在string.xml
:
<string name="applink">Looking for the regular Zesteve App?
<a href="https://play.google.com/store/apps/details?id=prokart.in.app">Get it here</a>
</string>
Run Code Online (Sandbox Code Playgroud)
现在你可以string
在任何给定的View
像这样使用它:
<TextView
android:id="@+id/getapp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textColor="@color/main_color_grey_600"
android:textSize="15sp"
android:text="@string/applink"/>
Run Code Online (Sandbox Code Playgroud)
现在,在您的活动或片段中,执行以下操作:
TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
到目前为止,您不需要设置android:autoLink="web"
或android:linksClickable="true"
使用此方法.
我希望你会发现这很有帮助.
pks*_*pks 20
TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);
Run Code Online (Sandbox Code Playgroud)
它将自动检测textview中文本的网址.
Kes*_*era 20
还管理 Linkify 文本颜色
tv_customer_care_no.setLinkTextColor(getResources().getColor(R.color.blue));
tv_customer_care_no.setText("For us to reach out to you, please fill the details below or contact our customer care at 18004190899 or visit our website http://www.dupont.co.in/corporate-links/contact-dupont.html");
Linkify.addLinks(tv_customer_care_no, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
Linkify.addLinks(tv_customer_care_no, Linkify.ALL);
Run Code Online (Sandbox Code Playgroud)
Dav*_*nta 19
理查德,下次,您应该在布局XML的TextView下添加此代码.
android:autoLink="all"
Run Code Online (Sandbox Code Playgroud)
这应该是这样的.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txtCredits"
android:id="@+id/infoTxtCredits"
android:autoLink="all"
android:linksClickable="true">
</TextView>
Run Code Online (Sandbox Code Playgroud)
您不需要使用此代码(t2.setMovementMethod(LinkMovementMethod.getInstance());
)以使链接可单击.
另外,这是事实:只要你设置了autoLink和linksClickable,不要忘记在String.xml文件中添加它,以便可点击链接起作用.
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Run Code Online (Sandbox Code Playgroud)
Dea*_*hRs 16
通过使用linkify: Linkify获取一段文本和正则表达式,并将文本中的所有正则表达式匹配转换为可单击的链接
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);
Run Code Online (Sandbox Code Playgroud)
别忘了
import android.widget.TextView;
Run Code Online (Sandbox Code Playgroud)
Rah*_*ina 14
这里有一行android代码,无论什么是字符串,什么是数据,都可以从textView中选择手机和网址.您不需要为此使用任何HTML标记.
TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com ");
// Makes the textView's Phone and URL (hyperlink) select and go.
Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
Run Code Online (Sandbox Code Playgroud)
aLe*_*ner 13
我注意到,使用android:autoLink="web"
这样
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"/>
Run Code Online (Sandbox Code Playgroud)
工作正常的URL,但由于我有一个我想要链接的电子邮件地址和电话号码,我最终使用这样的行android:autoLink="all"
这样
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="all"/>
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.
小智 13
将其添加到您的 EditText 中:
android:autoLink="web"
android:linksClickable="true"
Run Code Online (Sandbox Code Playgroud)
小智 11
确保在使用和使用格式正确的链接时不使用(例如).setAutoLinkMask(Linkify.ALL)
setMovementMethod(LinkMovementMethod.getInstance())
Html.fromHTML()
HTML
<a href="http://www.google.com/">Google</a>
小智 10
你只需要这个:
android:autoLink="web"
Run Code Online (Sandbox Code Playgroud)
将此行插入TextView,可以参考Web进行单击.URL地址设置为此TextView的文本.
例:
<TextView
android:id="@+id/textViewWikiURL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:text="http://www.wikipedia.org/"
android:autoLink="web" />
Run Code Online (Sandbox Code Playgroud)
小智 8
用这个...
TextView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
startActivity(in);
}
});
Run Code Online (Sandbox Code Playgroud)
并在清单文件中添加权限
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)
小智 8
接受的答案是正确的,但这意味着电话号码,地图,电子邮件地址和常规链接(例如http://google.com
没有href标签)将不再可点击,因为您无法在xml中自动链接.
我发现的唯一可用点击的完整解决方案如下:
Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
int end = text.getSpanEnd(span);
int start = text.getSpanStart(span);
buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
TextView不应该有android:autolink
.也没有必要android:linksClickable="true"
; 这是默认的.
这就是我在TextView中解决可点击和可见链接的方式(按代码)
private void setAsLink(TextView view, String url){
Pattern pattern = Pattern.compile(url);
Linkify.addLinks(view, pattern, "http://");
view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
}
Run Code Online (Sandbox Code Playgroud)
我不得不在几个地方找到它,但我终于让这个版本的代码可以工作。
文件strings.xml:
<string name="name1"><a href="http://www.google.com">link text1</a></string>
<string name="name2"><a href="http://www.google.com">link text2</a></string>
Run Code Online (Sandbox Code Playgroud)
文件myactivity.xml:
<TextView
android:id="@+id/textview1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="5dp" />
<TextView
android:id="@+id/textview2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="5dp" />
Run Code Online (Sandbox Code Playgroud)
文件myactivty.java(在 onCreate() 中):
TextView tv1 = (TextView)findViewById(R.id.textview1);
TextView tv2 = (TextView)findViewById(R.id.textview2);
tv1.setText(Html.fromHtml(getResources().getString(R.string.name1)));
tv2.setText(Html.fromHtml(getResources().getString(R.string.name2)));
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
这将创建一个文本的两种可点击超链接link text1
和link text2
该用户重定向到谷歌。
使用以下代码:
String html = "<a href=\"http://yourdomain.com\">Your Domain Name</a>"
TextView textview = (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(Html.fromHtml(html));
Run Code Online (Sandbox Code Playgroud)
[Tested in Pre-lollipop as well as in Lollipop and above]
您可以从后端或资源文件中获取HTML字符串.如果将文本作为资源字符串,请确保添加CDATA
标记:
<string name="your_text">![CDATA[...<a href="your_link">Link Title</a> ...]]</string>
Run Code Online (Sandbox Code Playgroud)
然后在代码中,您需要获取字符串并将其指定为HTML并设置链接移动方法:
String yourText = getString(R.string.your_text);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
textView.setText(Html.fromHtml(yourText));
}
try {
subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
//This code seems to crash in some Samsung devices.
//You can handle this edge case base on your needs.
}
Run Code Online (Sandbox Code Playgroud)
在 SpannableString 上创建扩展方法:
private fun SpannableString.setLinkSpan(text: String, url: String) {
val textIndex = this.indexOf(text)
setSpan(
object : ClickableSpan() {
override fun onClick(widget: View) {
Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url) }.also { startActivity(it) }
}
},
textIndex,
textIndex + text.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
Run Code Online (Sandbox Code Playgroud)
使用它使 TextView 中的字符串可点击:
myTextView.apply {
movementMethod = LinkMovementMethod.getInstance()
val googleUrl = "http://www.google.com"
val microsoftUrl = "http://www.microsoft.com"
val google = "Google"
val microsoft = "Microsoft"
val message = SpannableString("$google & $microsoft").apply {
setLinkSpan(google, googleUrl)
setLinkSpan(microsoft, microsoftUrl)
}
text = message
}
Run Code Online (Sandbox Code Playgroud)
享受!
你遇到问题的原因是它只试图匹配"裸"地址.诸如"www.google.com"或" http://www.google.com "之类的内容.
通过Html.fromHtml()运行文本应该可以解决问题.你必须以编程方式进行,但它确实有效.
如果使用基于 XML 的 TextView,根据您的要求,您只需要做两件事:
标识字符串中的链接,例如“这是我的网页”。您可以将其添加到 XML 内容或代码中。
在具有 TextView 的 XML 内容中,添加以下内容:
android:linksClickable="true"
android:autoLink="web"
Run Code Online (Sandbox Code Playgroud)
将 CDATA 添加到您的字符串资源
字符串.xml
<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>
Run Code Online (Sandbox Code Playgroud)
我只是浪费了很多时间来弄清楚你必须使用 getText(R.string.whatever) 而不是 getString(R.string.whatever)...
无论如何,这就是我的工作方式。同一文本视图中也有多个超链接。
TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
termsTextView.append("By registering your account, you agree to our ");
termsTextView.append(getText(R.string.terms_of_service));
termsTextView.append(", ");
termsTextView.append(getText(R.string.fees));
termsTextView.append(", and the ");
termsTextView.append(getText(R.string.stripe_connected_account_agreement));
termsTextView.setMovementMethod(LinkMovementMethod.getInstance());
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/termsTextView"/>
Run Code Online (Sandbox Code Playgroud)
字符串示例:
<string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
505010 次 |
最近记录: |