大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述Android:textview超链接相关的知识,希望能为你提供帮助。
我知道如果你在textview中放一个链接它会起作用,但如果我想显示例如:
谷歌stackoverflow
而不是整个链接(只是标签)我如何使这些链接可点击?
答案您可以有两个单独的TextView,如果需要,您可以在布局中相应地对齐它们:
Text1.setText(
html.fromHtml(
"<
a href="http://www.google.com">
google<
/a>
"));
Text1.setMovementMethod(LinkMovementMethod.getInstance());
Text2.setText(
Html.fromHtml(
"<
a href="http://www.stackoverflow.com">
stackoverflow<
/a>
"));
Text2.setMovementMethod(LinkMovementMethod.getInstance());
然后,如果你想剥离“链接下划线”。创建一个类:
public class URLSpanNoUnderline extends URLSpan {
public URLSpanNoUnderline(String url) {
super(url);
}
@Override public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
然后在主Activity类中添加此方法,其中包含TextView
private void stripUnderlines(TextView textView) {
Spannable s = new SpannableString(textView.getText());
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span: spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
然后在初始化TextViews之后(在你的onCreate中)调用它:
stripUnderlines(Text1);
stripUnderlines(Text2);
另一答案
TextView t2 = (TextView) findViewById(R.id.textviewidname);
t2.setMovementMethod(LinkMovementMethod.getInstance());
和
<
string name="google_stackoverflow">
<
a href="https://stackoverflow.com/questions/9852184/android-textview-hyperlink?rq=1">
google stack overflow<
/a>
<
/string>
链接是,“Android: textview hyperlink”
标签是“google stack overflow”
定义java中的第一个代码块和strings.xml文件中的第二个代码块。另外,请务必在java中的页面布局中引用textView的id。
另一答案如果你的HTML中有完整的链接,
android:autoLink="web"
就可以使用了。以下内容将以蓝色突出显示并可单击:另一答案这很简单的方法---
在你的活动中 -
TextView tv = (TextView) findViewById(R.id.site);
tv.setText(Html.fromHtml("<
a href=http://www.stackoverflow.com>
STACK OVERFLOW "));
tv.setMovementMethod(LinkMovementMethod.getInstance());
然后你将得到标签,而不是整个链接..
希望它能帮到你......
另一答案这应该工作。
TextView t2 = (TextView) findViewById(R.id.text2);
t2.setMovementMethod(LinkMovementMethod.getInstance());
and<
TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtCredits"
android:id="@+id/text2"
android:layout_centerInParent="true"
android:layout_marginTop="20dp">
<
/TextView>
另一答案这是我的工作实施
private void showMessage()
{lblMessage.setText("");
List<
String>
messages = db.getAllGCMMessages();
for (int k = messages.size() - 1;
k >
= 0;
--k)
{String message=messages.get(k).toString();
lblMessage.append(message + "");
}
Linkify.addLinks(lblMessage, Linkify.ALL);
}
并改变超链接的颜色,我编辑我的xml for textview-
android:textColorLink="#69463d"
另一答案我遇到了同样的问题,终于找到了可行的解决方案。
- 在string.xml文件中,定义:
< string name="textWithHtml"> The URL link is & lt; a href="http://www.google.com"> Google& lt; /a> < /string>
- 在Java代码中:
String text = v.getContext().getString(R.string.textWithHtml); textView.setText(Html.fromHtml(text)); textView.setMovementMethod(LinkMovementMethod.getInstance());
另一答案数据绑定怎么样?
@JvmStatic
@BindingAdapter("textHtml")
fun setHtml(textView: TextView, resource: String) {
val html: Spanned = if (Build.VERSION.SDK_INT >
= Build.VERSION_CODES.N) {
Html.fromHtml(resource, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(resource)
}textView.movementMethod = LinkMovementMethod.getInstance()
textView.text = html
}
strings.xml中
<
string name="text_with_link">
&
lt;
a href=https://www.songbingjia.com/android/%2$s>
%1$s&
lt;
/a>
<
/string>
在你的layout.xml中
<
TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:textHtml="@{@string/text_with_link(model.title, model.url)}"
tools:text="Some text" />
其中xml中的title和link是一个简单的String
您还可以将多个参数传递给数据绑定适配器
@JvmStatic
@BindingAdapter(value = https://www.songbingjia.com/android/["textLink", "link"], requireAll = true)
fun setHtml(textView: TextView, textLink: String?, link: String?) {
val resource = String.format(textView.context.getString(R.string.text_with_link, textLink, link))val html: Spanned = if (Build.VERSION.SDK_INT >
= Build.VERSION_CODES.N) {
Html.fromHtml(resource, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(resource)
}textView.movementMethod = LinkMovementMethod.getInstance()
textView.text = html
}
并在.xml中分别传递参数
<
TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:link="@{model.url}"
app:textLink="@{model.title}"
tools:text="Some text" />
另一答案使用
<
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="web"
android:text="www.google.com" />
这面旗帜
自动连接=“网”【Android(textview超链接)】控制是否自动找到并转换为可点击链接的网址等链接。默认值为“none”,禁用此功能。价值观:全部,电子邮件,地图,无,电话,网络。
推荐阅读
- Android-是否可以将可点击链接添加到字符串资源中
- 在android上禁用setMovementMethod(LinkMovementMethod.getInstance())
- 从app中的Safari链接打开safari
- 如何让电子应用程序打开以“http(//”或“https://”开头的所有链接,并在浏览器中打开target =“_ blank”而不是app)
- 如何解决Android ndk build命令失败()
- 我们如何将CMake或ndk-build集成到Android Studio 3.0.1中( Gradle版本是4.1,android插件版本3.0.1)
- 如何将外部库集成到Cocos Android项目中
- UINavigationController appDelegate UIViewController以编程方式
- 从AppDelegate中访问NavigationController指向的初始视图