有时候我们需要在Android的TextView中简单显示一些更多的功能,比如超链接啊,小图片啊什么的,查了下资料,简单写个小Demo做个备份

以下是部分代码,第一部分是在Activity中,


private void setTextView1() {

        String text = "TextView显示html文本:

粗体"
                + "百度链接"
                + "红色";
        textView.setText(Html.fromHtml(text));
        // 支持网页超链接点击
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }

    private void setTextView2() {
        String text = "电话: 020-5555555 "
                + "网站:http://www.weibo.com "
                + "微博提到某用户: @红茶36   "
                + "微博讨论的主题 : #Android面试宝典# #java宝典# 邮箱:956***473@qq.com";
        textView2.setText(text);
        // 识别超链接:电话,网页
        // Linkify:它会使用正则表达匹配相应的超链接,如果匹配成功,就会识别为超链接
        // 点击超链接后,会执行: startActivity(new Intent(Intent.ACTION_VIEW, uri))
        // 电话uri: tel://xx
        // 网页uri: http://xx
        Linkify.addLinks(textView2, Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
        // 添加自定义超链接
        LinkifyUtil.addCustomLinks(textView2);
    }

    private void setTextView3() {
        String text = "高兴[高兴]--TextView实现图文混排功能";
        
//        SpannableString ss = new SpannableString(text);
//        ImageSpan span = new ImageSpan(this, R.drawable.ic_launcher);
//        ss.setSpan(span, 2, 6, 0);
//        textView3.setText(ss);
        
        
        SpannableString ss = new SpannableString(text);
        Bitmap bitmap = createFixSizeBitmap(this, R.drawable.ic_launcher, dp2px(20));
        ImageSpan span = new ImageSpan(this, bitmap, ImageSpan.ALIGN_BOTTOM);
        ss.setSpan(span, 2, 6, 0);
        textView3.setText(ss);
    }

    private int dp2px(float dp) {
        return (int) (getResources().getDisplayMetrics().density * dp + 0.5f);
    }

    /**
     * 创建指定大小的Bitmap对象
     * @param textViewActivity
     * @param icLauncher
     * @param imageWidth 要生成的bitmap对象的宽度(高度)
     * @return
     */
    private Bitmap createFixSizeBitmap(Context context, int imageResId, int imageWidth) {
        // 原始图片
        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageResId);
        int rawWidth = bitmap.getWidth(); // 原始图片的宽度
        int rawHeight = bitmap.getHeight();// 原始图片的高度
        
        float scaleW = (float)imageWidth / rawWidth;
        float scaleH = (float)imageWidth / rawHeight;
        
        Matrix matrix = new Matrix();
        matrix.postScale(scaleW, scaleH);
        
        return Bitmap.createBitmap(bitmap, 0, 0, rawWidth, rawHeight, matrix, true); // 传false图片会失真

    }

*******************

下面传一下 部分LinkifyUtil 的代码

/**
     * 识别主题超链接: #xxx#
     * @param textView
     */
    public static void addTopicLinks(TextView textView) {
        // 匹配形如  #xxx#  的正则表达式
        // \u4E00-\u9FA5所有的中文字符
        Pattern p = Pattern.compile("#([A-Za-z0-9\u4E00-\u9FA5]+)#");
        String scheme = "weibo://topic?uid=";
        // 匹配的过滤器
        MatchFilter matchFilter =  null;
        // 用来处理返回的结果
        TransformFilter transformFilter = new TransformFilter() {
            
            @Override
            public String transformUrl(Matcher match, String url) {
                String str = match.group(0);
                String str2 = match.group(1);
                System.out.println("----------str : " + str + "  str2 : " + str2);
                return str2;
            }
        };
        Linkify.addLinks(textView, p, scheme, matchFilter, transformFilter);
    }

/**
     * 识别用户超链接: @xxx
     * @param textView
     */
    public static void addUserLink(TextView textView) {
        // 匹配形如  @xxx  的正则表达式
        // \u4E00-\u9FA5所有的中文字符
        Pattern p = Pattern.compile("\\@([A-Za-z0-9\u4E00-\u9FA5]+)\\.?");
        String scheme = "weibo://user?uid=";
        // 匹配的过滤器
        MatchFilter matchFilter =  new MatchFilter() {
            
            @Override // 是否接受匹配的结果,返回true表示接受匹配,则会显示成超链接
            public boolean acceptMatch(CharSequence s, int start, int end) {
                // 获取匹配到的字符串
                String bean = s.subSequence(start, end).toString();
                System.out.println("------------bean: " + bean);
                
                if (bean.endsWith(".")) { // 邮箱
                    return false;
                } else {
                    return true;
                }
            }
        };
        // 用来处理返回的结果
        TransformFilter transformFilter = new TransformFilter() {
            
            @Override
            public String transformUrl(Matcher match, String url) {
                String str = match.group(0);
                String str2 = match.group(1);
                System.out.println("----------str : " + str + "  str2 : " + str2);
                return str2;
            }
        };
        Linkify.addLinks(textView, p, scheme, matchFilter, transformFilter);
    }

****************

运行如下图:



更多相关文章

  1. android中相机支持功能查看
  2. xUtils 源码解析
  3. android webview js交互, 响应webview中的图片点击事件
  4. android 加载自定义图片并在图片上绘图
  5. Android到底那个Acitivity启动(二)
  6. Android(安卓)搜索结果关键字动态匹配筛选变色效果且高亮显示
  7. Android(安卓)超强图片工具类BitmapUtil
  8. 实例讲解Android中ContentProvider组件的使用方法
  9. Android高仿微信相册选择器 多图片选择器、拍照

随机推荐

  1. [原]Android Native Debug
  2. linux下操作android模拟器命令
  3. android编程中的琐碎知识点汇总(2)
  4. 为Android添加服务
  5. Android(安卓)如何把AsyncTask改用非内部
  6. 如何在mac本上安装android sdk
  7. Android 中文 API (26) ―― SeekBar
  8. Analyzing Android Malware
  9. Android Studio TV开发教程(一)处理电视硬
  10. 如何在activity中控制屏幕点亮与关闭