标签

Android 44

Android Network security configuration Android 网络配置 Android Camera Preview gradlew 源码分析 Android 动态修改菜单 Android RelativeLayout 之 Gravity 的使用 Android Studio Gradle Download Error Android加载子View 【转】Android打开与关闭软键盘 Android EditText软键盘显示隐藏以及“监听” Android mipmap文件夹 Android 用命令行更新SDK Android Service学习之AIDL, Parcelable和远程服务 Android 5.0设备中,Notification小图标是白色的 Android最佳实践 Android Keystore 文件的密码修改 Android Studio 中加载so库文件 Android 中方法重载遇到的问题 ListView & RecyclerView Google Volley如何缓存HTTP请求文件 Creating logs in Android applications Advanced Android TextView TextView高亮URL地址解析 TextView 高亮URL地址,并实现跳转 Best practices in Android development Android Sdk Manager无法更新问题解决办法 Android ViewPager滑动事件 Google Volley 网络请求框架(一) Andorid UI注入工具的使用(ButterKnife) Android 项目中出现的奇葩bug, 数据NullPointExcption Android Drawable Animation Android 图片的毛玻璃效果 Android之使用Log打印日志 使用Fidder来拦截Android发送的HTTP请求 Android之Webview使用 Android之Notification的使用(二) Android之Notification的使用(一) Android Keyboard Show&Hiden Android 粘贴板的使用 Android中使用.9.png 使用Fidder来拦截Android发送的HTTP请求 Andorid JUnit 单元测试 Activity之间的切换动画 Android ListView中Adapter的使用

TextView 高亮URL地址,并实现跳转

2015年01月15日

Android TextView 使用

TextView的使用中,存在很多高级功能。比如高亮URL地址、电话号码等

使用方法:

TextView tempText = new TextView(context);
tempText.setText("www.baidu.com");
tempText.setAutoLinkMask(Linkify.WEB_URLS);
tempText.setMovementMethod(LinkMovementMethod.getInstance());

但是我在使用过程中,要跳转到自己的Webview中去,又不想去解析字符串,提取里面的URL地址 所以我想了个简单的解决方案.

解决方法:

TextView tempText = new TextView(context);
tempText.setText("www.baidu.com");
SpannableStringBuilder style = new SpannableStringBuilder(pili.description);
tempText.setAutoLinkMask(Linkify.WEB_URLS);
tempText.setMovementMethod(LinkMovementMethod.getInstance());
URLSpan [] urls = tempText.getUrls();
if (urls == null || urls.length <= 0) {
    text.setText(pili.description);
} else {
    for (URLSpan urlSpan : urls) {
        String url = urlSpan.getURL();
        int n = pili.description.indexOf(url);
        if (n < 0) {
            // 去掉前面的HTTP
            url = url.substring(7);
            n = pili.description.indexOf(url);
        }
        if (n < 0) {
            continue;
        }
        style.setSpan(new URLSpanNoUnderline(urlSpan.getURL()), n, url.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
    }
    text.setText(style);
    text.setMovementMethod(LinkMovementMethod.getInstance());
}
public class URLSpanNoUnderline extends ClickableSpan {
    private final String mURL;
    public URLSpanNoUnderline(String url) {
        mURL = url;
    }

    public String getURL() {
        return mURL;
    }

    @Override
    public void onClick(View widget) {
        final Context context = widget.getContext();
        BrowserActivity.startActivity(context, mURL);
    }
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);  //取消下划线
        ds.setColor(0xff0066ff);     //指定文字颜色
        //ds.setTextSize(ds.getTextSize()*1.1F);
    }
}

就是如此的简单,但是为了弄这个东西,还是花了不少时间。

这种方法虽然可以实现功能,但是我觉得这样子做并不好。如果你有更好的解决方案。 望赐教,不胜感激。



友情链接: Hiro's Blog | Junjun's Blog