use*_*384 5 android google-chrome android-customtabs
我有一个文本视图,里面有一个链接.在代码中,我打电话setMovementMethod给用户点击文本时打开链接.但它会在默认浏览器或浏览器选择器中打开它.
如何使用带有可点击文本视图的Chrome自定义标签?
这是因为TextView造成URLSpan这是ClickableSpan为每个链接的文本模式.一旦MovementMethod找到url就调用了onClick方法URLSpan.此事件启动ACTION_VIEW意图,这就是您看到默认浏览器启动的原因.
您可以做的是编写自己的实现,在URLSpan那里覆盖onClick方法并CustomTabs从那里启动服务.
首先创建URLSpan将覆盖onClick方法的自定义:
public class CustomTabsURLSpan extends URLSpan {
public CustomTabsURLSpan(String url) {
super(url);
}
public CustomTabsURLSpan(Parcel src) {
super(src);
}
@Override
public void onClick(View widget) {
String url = getUrl();
//attempt to open in CustomTabs, if that fails call super.onClick(widget);
}
}
Run Code Online (Sandbox Code Playgroud)
创建自定义转换方法,将方法设置为链接:
public class LinkTransformationMethod implements TransformationMethod {
@Override
public CharSequence getTransformation(CharSequence source, View view) {
if (view instanceof TextView) {
TextView textView = (TextView) view;
Linkify.addLinks(textView, Linkify.WEB_URLS);
String stringText = textView.getText().toString();
Spannable text = (Spannable) textView.getText();
URLSpan[] spans = text.getSpans(0, textView.length(), URLSpan.class);
for (int i = spans.length - 1; i >= 0; i--) {
URLSpan oldSpan = spans[i];
text.removeSpan(oldSpan);
String url = oldSpan.getURL();
int startIndex = stringText.indexOf(url);
int lastIndex = startIndex + url.length();
text.setSpan(new CustomTabsURLSpan(url), startIndex, lastIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return text;
}
return source;
}
@Override
public void onFocusChanged(View view, CharSequence sourceText, boolean focused, int direction, Rect previouslyFocusedRect) {
}
}
Run Code Online (Sandbox Code Playgroud)
以下是快速解释:https://medium.com/@nullthemall/make-textview-open-links-in-customtabs-12fdcf4bb684#.ig1chpbbe
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |