1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      androidTextView中識(shí)別多個(gè)url并分別點(diǎn)擊跳轉(zhuǎn)方法詳解

      實(shí)現(xiàn)方案:

      創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元清澗做網(wǎng)站,已為上家服務(wù),為清澗各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

      我們直接參考實(shí)例代碼:

      private String pattern =
          "((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?|(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
      
      Pattern r = Pattern.compile(pattern);
      Matcher m;
      mTv.setText(identifyUrl(richURL.msg));
      
      public SpannableStringBuilderForAllvers identifyUrl(CharSequence text) {
        CharSequence contextText;
        CharSequence clickText;
        text = text == null ? "" : text;
        //以下用于拼接本來存在的spanText
        SpannableStringBuilderForAllvers span = new SpannableStringBuilderForAllvers(text);
        ClickableSpan[] clickableSpans = span.getSpans(0, text.length(), ClickableSpan.class);
        if (clickableSpans.length > 0) {
          int start = 0;
          int end = 0;
          for (int i = 0; i < clickableSpans.length; i++) {
            start = span.getSpanStart(clickableSpans[0]);
            end = span.getSpanEnd(clickableSpans[i]);
          }
          //可點(diǎn)擊文本后面的內(nèi)容頁
          contextText = text.subSequence(end, text.length());
          //可點(diǎn)擊文本
          clickText = text.subSequence(start, end);
        } else {
          contextText = text;
          clickText = null;
        }
        m = r.matcher(contextText);
        //匹配成功
        while (m.find()) {
          //得到網(wǎng)址數(shù)m.group()
          if (m.start() < m.end()) {
            span.setSpan(new LinkClickSpan(m.group(), m.group(), mUrlSpanClickListener),
                m.start(), m.end(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
          }
        }
        return span;
      }
      
      private static final String HTTPS = "https://";
      private static final String HTTP = "http://";
      private static final String FTP = "ftp://";
      
      public static boolean hasNetUrlHead(String url) {
        return (!TextUtils.isEmpty(url)) && (url.startsWith(HTTP) || url.startsWith(HTTPS) || url.startsWith(FTP));
      }
      
      private UrlSpanClickListener mUrlSpanClickListener = new UrlSpanClickListener() {
        @Override
        public void onClick(View view, String url, String content) {
          if (TextUtils.isEmpty(url)) {
            return;
          }
          Matcher url_matcher = Patterns.WEB_URL.matcher(url);
          if (url_matcher.matches()) {
            String tempUrl;
            if (hasNetUrlHead(url)) {
              tempUrl = url;
            } else {
              tempUrl = HTTPS + url;
            }
            //通過webview打開相應(yīng)的url
      
            //Bundle bundle = new Bundle();
            //bundle.putString(WebCordovaBaseFragment.EXTRA_URL, tempUrl);
            //bundle.putBoolean(WebCordovaBaseFragment.ENABLE_WEB_TITLE, true);
            //WebViewActivity.presentWeb(Utilities.getApplicationContext(), WebViewActivity.class, WebCommonFragment.class, content, bundle);
          }
        }
      };
      
      public interface UrlSpanClickListener {
        void onClick(View view, String url, String content);
      }
      
      public static class LinkClickSpan extends ClickableSpan {
        private int mColor = Utilities.getApplicationContext().getResources().getColor(R.color.yc_color_007AFF_CBN);
        private String mUrl;
        private String mContent;
        UrlSpanClickListener mClickListener;
      
        public LinkClickSpan(String url, String content, UrlSpanClickListener onClickListener) {
          super();
          mUrl = url;
          mContent = content;
          mClickListener = onClickListener;
        }
      
        @Override
        public void updateDrawState(TextPaint ds) {
          ds.setColor(mColor);
          ds.linkColor = mColor;
          ds.setUnderlineText(true);//設(shè)置是否下劃線
          ds.clearShadowLayer();
        }
      
        @Override
        public void onClick(View widget) {
          if (mClickListener != null) {
            mClickListener.onClick(widget, mUrl, mContent);
          }
        }
      }
      
      
      public class SpannableStringBuilderForAllvers extends SpannableStringBuilder{
      
        public SpannableStringBuilderForAllvers() {
          super("");
        }
        public SpannableStringBuilderForAllvers(CharSequence text) {
          super(text, 0, text.length());
        }
        public SpannableStringBuilderForAllvers(CharSequence text, int start, int end){
          super(text,start,end);
        }
      
        @Override
        public SpannableStringBuilder append(CharSequence text) {
          if (text == null) {
            return this;
          }
          int length = length();
          return (SpannableStringBuilderForAllvers)replace(length, length, text, 0, text.length());
        }
      
        /**該方法在原API里面只支持API21或者以上,這里適應(yīng)低版本*/
        public SpannableStringBuilderForAllvers append(CharSequence text, Object what, int flags) {
          if (text == null) {
            return this;
          }
          int start = length();
          append(text);
          setSpan(what, start, length(), flags);
          return this;
        }
      }
      
      
      public class ClickableSpanTextView extends AppCompatTextView {
      
        private BackgroundColorSpan backgroundColorSpan;
        private boolean hasSpan;
      
        public ClickableSpanTextView(Context context) {
          super(context);
          init();
        }
      
        public ClickableSpanTextView(Context context, AttributeSet attrs) {
          super(context, attrs);
          init();
        }
      
        public ClickableSpanTextView(Context context, AttributeSet attrs, int defStyleAttr) {
          super(context, attrs, defStyleAttr);
          init();
        }
      
        private void init() {
          setMovementMethod(LinkMovementMethod.getInstance());
          backgroundColorSpan = new BackgroundColorSpan(getContext().getResources().getColor(R.color.yc_color_4B4B4B_CDG));
        }
      
        @Override
        public boolean onTouchEvent(MotionEvent event) {
          boolean handled = super.onTouchEvent(event);
          int action = event.getAction();
      
          if (!(getText() instanceof Spannable)) {
            return handled;
          }
      
          Spannable spannable = (Spannable) getText();
          if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) {
            int x = (int) event.getX();
            int y = (int) event.getY();
            x -= getTotalPaddingLeft();
            y -= getTotalPaddingTop();
            x += getScrollX();
            y += getScrollY();
            Layout layout = getLayout();
            int line = layout.getLineForVertical(y);
            int off = layout.getOffsetForHorizontal(line, x);
            if (off >= getText().length()) {
              int off1 = layout.getOffsetForHorizontal(line, x - getTextSize());
              if (off == off1) {
                return handled;
              }
            }
      
            ClickableSpan[] links = spannable.getSpans(off, off, ClickableSpan.class);
            if (links.length > 0) {
              ClickableSpan clickableSpan = links[0];
              int start = spannable.getSpanStart(clickableSpan);
              int end = spannable.getSpanEnd(clickableSpan);
      
              if (action == MotionEvent.ACTION_DOWN && !hasSpan) {
                spannable.setSpan(backgroundColorSpan, start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                hasSpan = true;
              } else if (hasSpan) {
                spannable.removeSpan(backgroundColorSpan);
                hasSpan = false;
              }
            }
            return links.length != 0;
          } else {
            if (hasSpan && action != MotionEvent.ACTION_MOVE) {
              spannable.removeSpan(backgroundColorSpan);
              hasSpan = false;
            }
          }
          return handled;
        }
      }

      以上實(shí)例代碼大家可以測試下,感謝大家的學(xué)習(xí)和對(duì)創(chuàng)新互聯(lián)的支持。


      名稱欄目:androidTextView中識(shí)別多個(gè)url并分別點(diǎn)擊跳轉(zhuǎn)方法詳解
      分享網(wǎng)址:http://www.ef60e0e.cn/article/jdhdgc.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        万全县| 莱阳市| 株洲市| 白河县| 泾川县| 安福县| 汾阳市| 芒康县| 广昌县| 卢氏县| 新蔡县| 周宁县| 筠连县| 饶阳县| 东莞市| 米泉市| 桑植县| 昌乐县| 怀宁县| 民县| 兴义市| 娄烦县| 连山| 呼图壁县| 大厂| 南宁市| 青阳县| 梅河口市| 云梦县| 玉环县| 水富县| 大新县| 方正县| 平果县| 沾益县| 安吉县| 普格县| 衡阳县| 和林格尔县| 梅州市| 常宁市|