在 textView 中显示可点击的 link
Showing clickable link inside of the textView
有人知道如何在 textView
(或任何适当的视图)内显示可点击的 link。textView
位于 Recycler 行内。
我从 JSON 供稿中得到一个字符串响应,在该字符串中,有一个指向某个网页的 link。
当用户点击那个 link ,我希望它打开浏览器并转到该页面。
此外,我正在尝试处理 Recycler View 适配器中 onBindViewHolder
方法内部的点击。
我尝试在 xml 和 [=15= 中设置 android:autoLink="web"
] 在 java 中为此 textView
,但它不起作用并给我这个错误:
" FATAL EXCEPTION: main android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? "
如果有更好的方法来处理这些情况,请告诉我。
使用 SpannableString。
例如:我要为注册文本(蓝色带下划线)应用可点击方式,
String text ="Don't have an account? Register";
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(new ForegroundColorSpan(getResources()
.getColor(R.color.blue)), 23, 31, 0);// i am applying for Register alone. so starting count is 23 and end count is 31.
ClickableSpan clickableSpan = new SpaceAdjust(text) {
@Override
public void onClick(View textView) {
//here perform your stuff
}
};
spannableString.setSpan(clickableSpan, 23, 31,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
如果您需要使带有下划线的文本可点击。用这个方法。
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;
/**
* SpaceAdjust.java
*
* This is the class that is used to display underline text
*/
public class SpaceAdjust extends ClickableSpan {
/** The clicked. */
String clicked;
/**
* Instantiates a new space adjust.
*
* @param string
* the string
*/
public SpaceAdjust(String string) {
super();
clicked = string;
}
/*
* (non-Javadoc)
*
* @see android.text.style.ClickableSpan#onClick(android.view.View)
*/
public void onClick(View tv) {
// Un used Code .. Implemented Method
}
/*
* (non-Javadoc)
*
* @see
* android.text.style.ClickableSpan#updateDrawState(android.text.TextPaint)
*/
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(true); // if you don't want to use underline text, just make this as false.
}
}
试试这个,
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:autoLink="web"
android:textColorHighlight="@color/RED"
android:isScrollContainer="true"
android:scrollbars="vertical"
android:textColorLink="@color/RED" />
尝试
android:linksClickable="true"
在你的 textView 中
以及您的 activity 集合的 onCreate
edtLinks.setAutoLinkMask(Linkify.WEB_URLS);
其中,edtLinks 是您的 TextView。
此外,您还可以在下方添加textChangelistner
edtLinks.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Linkify.addLinks(s, Linkify.WEB_URLS);
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
});
有人知道如何在 textView
(或任何适当的视图)内显示可点击的 link。textView
位于 Recycler 行内。
我从 JSON 供稿中得到一个字符串响应,在该字符串中,有一个指向某个网页的 link。
当用户点击那个 link ,我希望它打开浏览器并转到该页面。
此外,我正在尝试处理 Recycler View 适配器中 onBindViewHolder
方法内部的点击。
我尝试在 xml 和 [=15= 中设置 android:autoLink="web"
] 在 java 中为此 textView
,但它不起作用并给我这个错误:" FATAL EXCEPTION: main android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? "
如果有更好的方法来处理这些情况,请告诉我。
使用 SpannableString。
例如:我要为注册文本(蓝色带下划线)应用可点击方式,
String text ="Don't have an account? Register";
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(new ForegroundColorSpan(getResources()
.getColor(R.color.blue)), 23, 31, 0);// i am applying for Register alone. so starting count is 23 and end count is 31.
ClickableSpan clickableSpan = new SpaceAdjust(text) {
@Override
public void onClick(View textView) {
//here perform your stuff
}
};
spannableString.setSpan(clickableSpan, 23, 31,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
如果您需要使带有下划线的文本可点击。用这个方法。
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;
/**
* SpaceAdjust.java
*
* This is the class that is used to display underline text
*/
public class SpaceAdjust extends ClickableSpan {
/** The clicked. */
String clicked;
/**
* Instantiates a new space adjust.
*
* @param string
* the string
*/
public SpaceAdjust(String string) {
super();
clicked = string;
}
/*
* (non-Javadoc)
*
* @see android.text.style.ClickableSpan#onClick(android.view.View)
*/
public void onClick(View tv) {
// Un used Code .. Implemented Method
}
/*
* (non-Javadoc)
*
* @see
* android.text.style.ClickableSpan#updateDrawState(android.text.TextPaint)
*/
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(true); // if you don't want to use underline text, just make this as false.
}
}
试试这个,
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:autoLink="web"
android:textColorHighlight="@color/RED"
android:isScrollContainer="true"
android:scrollbars="vertical"
android:textColorLink="@color/RED" />
尝试
android:linksClickable="true"
在你的 textView 中
以及您的 activity 集合的 onCreate
edtLinks.setAutoLinkMask(Linkify.WEB_URLS);
其中,edtLinks 是您的 TextView。
此外,您还可以在下方添加textChangelistner
edtLinks.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Linkify.addLinks(s, Linkify.WEB_URLS);
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
});