国产一区二区美女诱惑_国产精品免费播放_91精品国产综合久久香蕉麻豆 _久久精品30_久久综合88_国产精品亚洲成人_黑人极品videos精品欧美裸_亚洲色图欧美激情

原創(chuàng)生活

國(guó)內(nèi) 商業(yè) 滾動(dòng)

基金 金融 股票

期貨金融

科技 行業(yè) 房產(chǎn)

銀行 公司 消費(fèi)

生活滾動(dòng)

保險(xiǎn) 海外 觀察

財(cái)經(jīng) 生活 期貨

當(dāng)前位置:滾動(dòng) >

hashtable源碼解析-JDK1.8 clipboard實(shí)現(xiàn)不同間復(fù)制粘貼

文章來源:財(cái)金網(wǎng)  發(fā)布時(shí)間: 2019-04-17 20:55:43  責(zé)任編輯:cfenews.com
+|-

【原標(biāo)題:hashtable源碼解析-JDK1.8 clipboard實(shí)現(xiàn)不同間復(fù)制粘貼】財(cái)金網(wǎng)消息 前言

最近在寫項(xiàng)目的時(shí)候遇到了一個(gè)這樣的需求,要像qq一樣,點(diǎn)擊評(píng)論的者的名字要跳轉(zhuǎn)評(píng)論者的用戶信息界面,并且點(diǎn)擊評(píng)論信息中的web鏈接要跳轉(zhuǎn)到WebActivity,同時(shí)如果是其他數(shù)字的話要像qq一樣點(diǎn)擊并顯示底部Dialog提示是播打電話還是復(fù)制號(hào)碼。

效果

先給大家看看效果

下面的評(píng)論由一個(gè)TextView顯示,其實(shí)顯示為淡藍(lán)的都是可以點(diǎn)擊的區(qū)域。

思路

因?yàn)闆]做過肯定是先百度了解一下,大部分的處理都是先設(shè)置TextView的autolink,然后系統(tǒng)會(huì)給你判斷TextView中是否可以匹配到鏈接。然后通過SpannableStringBuilder來設(shè)置點(diǎn)擊事件,當(dāng)百度的部分有限,只能了解到web鏈接的點(diǎn)擊事件監(jiān)聽,所以我在此基礎(chǔ)上并綜合直接給TextView設(shè)置部分點(diǎn)擊的知識(shí)做了一些嘗試,但是出現(xiàn)了一些問題,就是當(dāng)autolink設(shè)置的過濾在TextView中的文字中沒有匹配到的時(shí)候不能獲取到Spannable對(duì)象。我就自己new了一個(gè),但是卻不能處罰點(diǎn)擊事件,最后找到了一個(gè)TextViewtv.setMovementMethod(LinkMovementMethod.getInstance());方法,設(shè)置之后才能觸發(fā)點(diǎn)擊事件。

實(shí)現(xiàn)步驟

首先給你的TextView設(shè)置autoLink屬性

如下

android:autoLink="all"

然后實(shí)現(xiàn)一個(gè)初始化web和數(shù)字鏈接點(diǎn)擊的監(jiān)聽,如下

public static SpannableStringBuilder getWebLinkStyle(CharSequence text, Context context) {    if (text instanceof Spannable) {      int end = text.length();      Spannable sp = (Spannable) text;      URLSpan urls[] = sp.getSpans(0, end, URLSpan.class);      SpannableStringBuilder style = new SpannableStringBuilder(text);      style.clearSpans();      for (URLSpan urlSpan : urls) {        ClickableSpan myURLSpan = new ClickableSpan() {          @Override          public void onClick(@NonNull View view) {            if (urlSpan.getURL().startsWith("http")) {              WebActivity.startWebBrowsing(context, urlSpan.getURL(), "");            } else {              String number = urlSpan.getURL();              if (number.contains(":")) {                number = number.split[1](":");              }              showBottomSheetDialog(context, number);            }          }        };        style.setSpan(myURLSpan, sp.getSpanStart(urlSpan),            sp.getSpanEnd(urlSpan),            Spannable.SPAN_EXCLUSIVE_INCLUSIVE);      }      return style;    }    return null;  } public static void showBottomSheetDialog(Context context, final String number) {    BottomSheetDialog dialog = new BottomSheetDialog(context);    View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_bottom, null);    TextView tvTitle = dialogView.findViewById(R.id.tv_title);    tvTitle.setText(String.format("%s\n可能是一個(gè)電話號(hào)碼或者其他聯(lián)系方式,你可以", number));    TextView tvCall = dialogView.findViewById(R.id.tv_call);    tvCall.setOnClickListener(view -> {      Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + number));      context.startActivity(dialIntent);      dialog.dismiss();    });    TextView tvCopty = dialogView.findViewById(R.id.tv_copy);    tvCopty.setOnClickListener(view -> {      ClipboardManager copy =          (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);      copy.setText(number);      dialog.dismiss();      ToastHelper.toast("已復(fù)制到剪切板");    });    TextView tvCancel = dialogView.findViewById(R.id.tv_cancel);    tvCancel.setOnClickListener(view -> dialog.dismiss());    dialog.setContentView(dialogView);    dialog.show();  }

從這個(gè)代碼里面可以看到text instanceof Spannable成立的時(shí)候即TextView中包含符合autolink過濾的鏈接。我們可以通過URLSpan來找到對(duì)應(yīng)的鏈接。然后判斷是否為web鏈接和數(shù)字,如果是數(shù)字的話顯示彈窗,提示打電話或者復(fù)制。代碼如下,同理如果不成立則說明TextView不包含autolink過濾的鏈接。只能返回null,需要新建一個(gè)。

接下來就是評(píng)論用戶設(shè)置點(diǎn)擊事件了。TextPositionBean是記錄每一個(gè)評(píng)論者用戶名在TextView文字中開始和結(jié)束的位置,因?yàn)樵诮o每個(gè)評(píng)論者名字加上點(diǎn)擊事件時(shí)需要給定點(diǎn)擊文字的范圍。style.setSpan(clickableSpan,textPositionBean.getStart(),textPositionBean.getEnd(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);這其中g(shù)etStart()和getEnd()就確定了點(diǎn)擊文字的范圍。

代碼如下

SpannableStringBuilder style = UiHelper.getWebLinkStyle(tvCommentInfo.getText(),context);    if (style == null){      style = new SpannableStringBuilder(stringBuilder.toString());    }    for (TextPositionBeantextPositionBean : textPositionBeans) {      ClickableSpan clickableSpan = new ClickableSpan() {        @Override        public void onClick(@NonNull View view) {          UserInfoActivity.goToUserInfoActivity(context,textPositionBean.getData());        }      };      style.setSpan(clickableSpan,textPositionBean.getStart(),textPositionBean.getEnd(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tvCommentInfo.setMovementMethod(LinkMovementMethod.getInstance());    }    tvCommentInfo.setText(style);

當(dāng)不存在過濾條件的時(shí)候,我就自己手動(dòng)獲取一個(gè),然后根據(jù)之前紀(jì)錄的評(píng)論用戶的用戶名出現(xiàn)的位置,來添加點(diǎn)擊事件,并且激活點(diǎn)擊響應(yīng)。即可

如果需要BottomSheetDialog的布局文件可看如下代碼

專題首頁(yè)|財(cái)金網(wǎng)首頁(yè)

原創(chuàng)
新聞

精彩
互動(dòng)

獨(dú)家
觀察

京ICP備2021034106號(hào)-38   營(yíng)業(yè)執(zhí)照公示信息  財(cái)金網(wǎng)  版權(quán)所有  cfenews.com  投稿郵箱:362293157@qq.com  業(yè)務(wù)QQ:362293157立即發(fā)帖
极品av少妇一区二区| 激情乱色小说视频| 欧美午夜免费电影| 欧美成va人片在线观看| 精品小视频在线| 在线天堂视频| 人人超在线公开视频| h1515四虎成人| 神马久久一区二区三区| 一本色道88久久加勒比精品| 国产乱对白刺激视频不卡| 国产精品热久久久久夜色精品三区| 亚洲午夜精品在线| 日韩精品一区二区三区视频播放 | 国产精品丝袜黑色高跟| 欧美日韩另类在线| 亚洲欧美国产精品va在线观看| 国模吧精品人体gogo| 欧美理论影院| 深爱激情综合网| 日韩国产精品91| 久久精品欧美一区二区三区不卡| 一本一道波多野结衣一区二区| eeuss在线播放| 黄页网站大全在线免费观看| 国偷自产av一区二区三区| 亚洲欧美日韩专区| 亚洲色图欧美偷拍| 精品国产免费久久| 一区二区三区伦理| heyzo久久| 国产成人精品三级| 在线国产亚洲欧美| 国产三级在线免费| 99久久人爽人人添人人澡| 久久一区中文字幕| 午夜电影一区二区| 一级视频在线观看视频在线啦啦| 播放一区二区| 久久国产精品99国产| 亚洲免费在线视频| 国产美女视频黄a视频免费| 亚洲十八**毛片| 亚洲午夜极品| 一区二区三区在线观看动漫| aaa大片免费观看| 亚洲伦理影院| 日日噜噜夜夜狠狠视频欧美人| 亚洲激情一二三区| 污视频在线看操| 久久a爱视频| 99在线精品免费| 亚洲国产免费av| 欧美专区福利免费| 亚洲专区一区| 色婷婷av久久久久久久| av资源种子在线观看| 精品在线观看入口| 国产午夜精品福利| 亚洲视频电影图片偷拍一区| 欧美大片1688网站| 另类调教123区 | 国产精品久久久久久久久久辛辛 | 亚洲福利在线看| 我爱我色成人网| 日韩精品高清不卡| 欧美一区三区四区| 神马电影网我不卡| 麻豆国产欧美日韩综合精品二区| 欧美三电影在线| 手机av在线播放| 亚洲在线成人| 51精品视频一区二区三区| 羞羞电影在线观看www| 国产日韩欧美一区二区三区在线观看| 五月激情综合色| 91精品久久| 亚洲免费中文| 欧美成人国产一区二区| 51一区二区三区| 丁香婷婷深情五月亚洲| 亚洲日本aⅴ片在线观看香蕉| 精品一级视频| 国产亚洲制服色| 日漫免费在线观看网站| 日韩欧美伦理| 色呦呦一区二区三区| av在线播放资源| 国产精品一区二区久激情瑜伽| 日韩黄色高清视频| 蜜桃精品wwwmitaows| 亚洲成人自拍一区| 成人影院大全| 99国产精品久| 97人人在线| 免费在线观看一区二区三区| 亚洲精品视频播放| 亚洲桃色综合影院| 欧美性猛交xxxx| 黄色精品视频网站| 中文一区二区完整视频在线观看 | 99爱在线视频| 国产98色在线|日韩| 天天av综合网| 国产日韩欧美一区| 亚洲女成人图区| 婷婷精品进入| 日韩欧美一卡二卡| 国产中文字幕一区二区三区| 一本大道久久a久久综合婷婷| jvid一区二区三区| 亚洲人成亚洲人成在线观看图片| 国内小视频在线看| 91啪亚洲精品| 婷婷在线播放| 久久久国产精华| 国产嫩草在线视频| 国产欧美一区二区三区鸳鸯浴| 4438x成人网全国最大| 成人精品国产福利| 看黄网站在线| 91一区在线观看| 变态调教一区二区三区| 久久精品一区二区三区不卡| 金瓶狂野欧美性猛交xxxx| 久久久久久久网| a级大胆欧美人体大胆666| 国产喂奶挤奶一区二区三区| 国产黄大片在线观看| 中文字幕在线不卡一区| 性欧美videohd高精| 亚洲最色的网站| 欧洲精品99毛片免费高清观看 | 毛片激情在线观看| 99视频精品在线| 日本高清在线观看| 国产女人aaa级久久久级| av色在线观看| 一区二区三区四区激情| 欧美黄视频在线观看| 色天天综合久久久久综合片| 欧美一性一交| 亚洲国产精品yw在线观看| 亚洲人妖在线| 你懂的在线免费观看| 91亚洲国产成人精品一区二区三 | 99精品一区二区| 俺来也官网欧美久久精品| 亚洲精选免费视频| 老司机精品视频在线播放| 日韩一区二区免费视频| 亚洲日本激情| 成a人v在线播放| 欧美国产精品一区二区| 美女精品视频在线| 日韩欧美一级片| 久久久青草婷婷精品综合日韩| 91在线网址| 亚洲免费在线播放| 亚洲精品动态| 污视频网站免费看| 成人激情黄色小说| 玖玖精品在线| 日韩午夜精品视频| 日韩av一级片| 涩涩视频在线播放| 色偷偷88欧美精品久久久| 亚洲九九在线| 99免在线观看免费视频高清| 国产精品激情偷乱一区二区∴| 2020国产精品极品色在线观看| 亚洲黄色av网站| 国产经典欧美精品| 99精品在免费线偷拍| 91精品国模一区二区三区| 香蕉国产精品偷在线观看不卡| 福利在线视频网站| 福利视频导航一区| 激情综合亚洲| 欧美黑人猛交| 欧美欧美欧美欧美| 久久精品久久综合| 成人精品国产亚洲| 亚洲福利视频二区| 99精品视频一区| 欧美黑白配在线| 新欧美整片sss第一页| 亚洲视频在线一区| 自拍偷拍欧美专区| 调教一区二区| 欧美一区二区在线视频| 国产一区 二区 三区一级| 在线免费观看亚洲| 亚洲美女激情视频| 久久午夜老司机| 久久精品国产99久久| 欧美伦理免费在线| 精品国产乱码久久久久久牛牛| www.色精品| 日韩久久电影|