一、需求描述

使用TextView展示H5文本,文本中包含关键词和图片,在H5文本中只有关键词会标红,在TextView中展示出来的关键词需要加点击事件。

具体如下图:

使用TextView展示H5文本

二、需求分析——主要知识点

(1)、使用SpannableString

因H5文本中包含超链接和图片,而且我们要使用TextView展示,那就必须使用SpannableString。将H5文本格式化成Spanned之后再转成SpannableString,然后添加 ClickSpan 实现点击事件

(2)、如何解析H5文本获取全部关键词?

需求描述中有说明:在H5文本中只有关键词会标红,所以我们可以根据<font> 节点获取全部的关键词,获取之后存储在set中实现关键词去重。

解析H5文本的时候我们可以自己去解析,也可以直接使用 jsoup 库 。

jsoup 是一个开源的H5文本解析库,文中使用的是jsoup库。
添加依赖的时候,直接在 ProjectStructure——Dependences中搜索添加即可; 或者直接在 gradle文件中添加compile 'org.jsoup:jsoup:1.10.3'

(3)、如何展示图片?

使用 Html.fromHtml(str , ImageGetter , tagHandler) 方法格式化H5 文本时,ImageGetter 可以实现图片的加载。由于图片加载是耗时操作,需要将此代码放置在线程中,防止主线程阻塞。Html.fromHtml(str) 方法不支持图片的展示。

(4)、如何给所有关键词加点击事件?

加点击事件的时候无疑要使用 ClickSpan, 前面我们也已经获取到了全部关键词,而 setClickSpan 的时候需要用到关键词的索引,那么接下来我们就需要遍历获取关键词的索引位置。

遍历某一个关键词的时候,我们会获取到起始索引,根据起始索引又能得到结束索引。获取到该关键词第一次出现时的索引之后,我们需要将字符串进行截取,在截取之后的字符串中继续查找该关键词出现的位置,这样得到的位置是在截取之后的字符串中的位置,我们还要得到关键词在原始字符串中的位置,然后,依次类推,直到返回的索引为-1 —— -1表示后面的文本中没有该关键词了,才去遍历下一个关键词。

截取的目的是为了找出某个关键词所有的出现位置。

所谓原始字符串,这里指的是 Html.fromHtml() 格式化之后构造的SpannableString。

(5)、文本的滚动处理

TextView 本身具有滚动属性,但是在不同的手机上得到的效果不一致,为了方便控制滚动效果,外层使用ScrollView包裹。

三、具体代码实现:

(1)、activity_showh5text.xml

<?xml version="1.0" encoding="utf-8"?>
<layout><data></data><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv_showComplexH5Text"android:layout_width="wrap_content"android:layout_height="wrap_content"/></ScrollView></layout>

(2)、ShowH5TextActivity.java

代码中的H5文本串范例由于在AS中多次格式化,所以出现了很多 +“” ,不影响正常效果。

/*** 作者:CnPeng* <p>* 时间:2017/10/20:下午3:47* <p>* 说明:在TextView中展示H5文本,在H5中关键字标红,其他文本不设置字体。在TextView中需要给关键字增加点击事件,同时TextView中还需要展示出H5中指定的图片* <p>* ——使用了数据绑定* ——在解析这个 H5 文本串时使用的是 jsoup 库。* ——虽然TextView本身具有滚动属性,但是在不同手机上表现不一样:华为Che1-L20上滑动不流畅,魅族m3-note上滑动后会自动回到顶部。所以用ScrollView 包裹* ——jsoup中没有找到关于根据TAG和节点文本获取属性值的方法,所以无法通过代码去获取font节点中的属性值。(确实有必要的话可以考虑自己解析h5文本)* ——使用线程是为了保证图片能加载处理,加载图片是耗时操作,不用子线程的话图片可能会加载不出来*/public class ShowH5TextActivity extends AppCompatActivity {String H5String = "<html>\n" + " <head></head>\n" + " <body>\n" + "  <p style=\"text-indent: 2em;\"><span " + "style=\"font-family: 宋体, SimSun; font-size: 16px;\">周三下午公布的<font " + "color=\"#FF0000\">英国</font>5月失业率、英国5月失业金申请人数、英国4月三个月ILO失业率显示,英国4月三个月剔除红利的平均工资年率刷新2015年1月以来新低。英国2-4月连续3" + "个月失业率为1975年以来最低,英国就业市场连续3" + "个月保持稳健,但薪资增速进一步放缓,料将对内需产生负面影响,为英国经济增长预期增添担忧情绪。英国国家统计局表示薪资数据将改善小型企业的薪资策略,对薪资水平产生下行影响。</span></p>\n" + "  " +"" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "<p><br " + "/></p>\n" + "  " + "<p" + "" + " " + "style=\"text-indent: " + "2em;" + "\"><span " + "" + "" + "" + "style=\"font-family:" + " " + "宋体, " + "" + "SimSun; " + "font-size: " + "16px;" + "\">英国前首相<font " + "color=\"#FF000\">卡梅伦</font>表示现任首相特雷莎&middot;" + "梅应采取“软脱欧”,并表示她应该与工党等反对派进行进一步交涉,与各党派进行更广泛的磋商以达成更多共识。认为“软脱欧”或许会面临更大压力,并表示议会现在应尽快面对这个问题。同时<font " + "color=\"#FF000\">卡梅伦</font>还对特蕾莎&middot;梅表示了支持。</span></p>\n" + "  <p><br /></p>\n" + "  <p " + "style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;" + "\">据华尔街日报,MacroPolicy" + " Perspectives " + "LLC调查显示约50%的受访者表示,股市没有对美联储的计划做出反应,42" + "%的受访者认为信用债市场也没有做出反应。几乎没有受访者认为美联储的计划在任何市场得到了充分的消化。这表明如果美联储在启动这项计划前没有与市场有效沟通,将可能引发不利的市场变动。</span></p>\n" +"  <p><br /></p>\n" + "  <p style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun; " + "font-size:" + " 16px;\">北京时间本周四凌晨2点美联储将公布最新利率决议及<font " + "color=\"#FF0000\">政策声明</font>,预计美元在经历会议后将面临走软风险;市场广泛预期本次会议将加息25个基点至1.00%-1.25%;然而,FOMC有可能在此次声明中降低核心PCE" + "通胀预期,长期联邦利率中值预期也有降低的可能性,这将对加息造成压力;此外,预计本次会议将对缩减资产负债表计划有所置评。</span></p>\n" + "  <p><br /></p>\n" + "  "+ "<p " + "style=\"text-indent: 2em;\"><img src=\"http://www.gfxa" + "" + "" + "" + "" + "" + "" + "" + "" + ".com/upload/image/20170614/6363305821523119573565195.png\" title=\"\" /></p>\n" + "  <p " + "style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;" + "\">支撑:1260——1255——1247 阻力:1273——1281</span></p>\n" + "  <p style=\"text-indent: 2em;\"><span " + "style=\"font-family: 宋体, SimSun; font-size: 16px;\">交易策略:现货黄金现价1268.30,日内交易建议如下:</span></p>\n" + "  <p "+ "style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;\">A:北京时间22:00之前," + "现货黄金上行至1274附近时四十分之一仓位做空,止损设1279,目标下看至1268/1265区间止盈。持仓阶段,现货黄金下破1271后,建议将止损位下移至1274附近。持仓阶段,浮盈大于6" + "美金时建议随机止盈。鉴于美联储利率决议影响的不确定性,此交易如触发,北京时间6月15日01:00之前建议择机离场。</span></p>\n" + "  <p style=\"text-indent: " +"2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;\">B:北京时间6月15日07:00之前," + "现货黄金下行至1260和1253附近时分别以五十分之一仓位做多,止损统一设1245,目标依次上看1268—1273—1281—1288附近。持仓阶段,浮盈大于5" + "美金时,建议将止损位上移至成本位。持仓阶段,浮盈大于25美金时建议随机止盈。</span></p>\n" + "  <p><br /></p>\n" + " <p style=\"text-indent: "+ "2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;\">美元兑日元</span></p>\n" + "  <p " + "style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;" + "\">美元兑日元</span></p>\n" + "  <p style=\"text-indent: 2em;\"><img src=\"http://www.gfxa" + "" + "" + "" + ".com/upload/image/20170614/6363305822435631122386267.png\" title=\"\" /></p>\n" + "  <p " + "style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun; font-size: 16px;\">支撑109.90 " + "阻力110.40-110.80</span></p>\n" + "  <p style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, SimSun;" +"" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + " " + "font-size: " + "16px;" + "\">交易策略:美元兑日元,现价报111.20。明日凌晨有美联储议息会议,注意风险。加息概率极高,但是美元走势依旧疲软,不排除出现美元空头回补的现象。日内交易建议如下:</span" + "></p" + "" + ">\n" + "" + "  " + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "<p " + "style=\"text-indent: " + "2em;" + "\"><span " + "style=\"font-family: " + "宋体, " + "SimSun;" + "" + " " + "font-size: " + "16px;" + "\">A: " + "突破110.40做多,止损110.30,止盈110.77</span></p>\n" + "  " + "<p " +"" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "style=\"text-indent: 2em;" + "\"><span " + "" + "style=\"font-family:" + " 宋体, " + "" + "SimSun; " + "font-size: " + "16px;" + "\">B: " +"" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "应对加息:限价卖出挂单于110.80,止损111.20,止盈110.40</span></p>\n" + "" + "  " + "<p><br " + "/></p>\n" + " " + " "+ "<p " + "style=\"text-indent: " + "2em;\"><span " + "style=\"font-family: 宋体, " + "SimSun; " + "font-size: 16px;" + "\">英镑兑美元</span></p>\n" + "  <p " + "style=\"text-indent: 2em;" + "\"><img" + " " + "src=\"http://www.gfxa" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" +"" + "" + "" + "" + "" + "" + "" + "" + ".com/upload/image/20170614/6363305823223140971492124.png\" " + "title=\"\" " + "/><span" + " " + "style=\"font-family: 宋体, " + "SimSun; font-size: 16px;\">&nbsp; &nbsp;" +"" + "" + "" + "" + "" + "" + "" + "" + " &nbsp; &nbsp;" + " " + "&nbsp; &nbsp;" + " " + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "&nbsp; &nbsp; &nbsp; &nbsp; " + "&nbsp;" + "" +" " + "&nbsp; " + "&nbsp; " + "" + "" + "&nbsp; " + "&nbsp; " + "&nbsp;" + " " + "&nbsp; " + "&nbsp; " + "" + "&nbsp;" + "</span></p>\n" + "" + "" + "  <p " + "" + "style=\"text-indent: 2em;" + "\"><span" + " "+ "style=\"font-family: " + "宋体, " + "" + "SimSun; " + "font-size: " + "16px;" + "\">支撑1.2673-1.2600 " + "阻力1.1287-1.2828</span></p>\n" + "  " + "<p" + " " + "style=\"text-indent:" + " " + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "2em;" + "\"><span " + "" + "" + "style=\"font-family: " + "宋体, " + "SimSun;" + " " + "font-size: " + "" + "16px;" + "\">交易策略:如图欧元兑美元四小时图所示,现价报1.2753,欧元轴心点为1.2714,中枢区间为1.2698—1.2730" + ",日内交易建议如下:</span></p>\n" + "  " + "<p " + "style=\"text-indent: 2em;\"><span style=\"font-family: 宋体, " + "SimSun; font-size: " + "16px;" +"\">A:建议1.2730卖出英镑对美元,止损1.2787,止盈1.2673.</span></p>\n" + "  <p " + "style=\"text-indent: 2em;" + "\"><span " + "style=\"font-family: 宋体, SimSun; font-size: 16px;" + "\">(该建议以10000美金下0.5手为基准,参照可自行换算。请投资者控制好仓位,严格止损。)</span></p>\n" + "  <p><br /></p>\n" + " </body>\n" + "</html>";private ActivityShowh5textBinding binding;private String                    tempSplitedStr;       //临时切割得到的字符串private final int FLAG_CONVERT_H5TEXT_OVER = 1;  //将H5转换成spanableString 完毕private final int MODE_INTRINSIC           = 0x001; //根据图片的原始大小进行展示private final int MODE_BASE_WINDOW_WITH    = 0x002; //与屏幕等宽(保持宽高比)Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (null != msg && msg.what == FLAG_CONVERT_H5TEXT_OVER) {binding.tvShowComplexH5Text.setText((SpannableString) msg.obj);//设置该句使文本的超连接起作用,不设置该句代码,点击事件不生效!!!binding.tvShowComplexH5Text.setMovementMethod(LinkMovementMethod.getInstance());}}};@Overridepublic void onCreate(@NullableBundle savedInstanceState) {super.onCreate(savedInstanceState);binding = DataBindingUtil.setContentView(this, R.layout.activity_showh5text);getAndSetStrToTextView();}/*** 获取并设置字符串到TextView*/private void getAndSetStrToTextView() {final HashSet<String> keyWordsSet = getAllKeyWords();new Thread(new Runnable() {     //之所以放在线程中完成H5转 SpannableStirng ,是为了加载H5的图片@Overridepublic void run() {Spanned normalStr = convertH5TextToSpanned();SpannableString spannableStr = new SpannableString(normalStr);  //最终要展示的字符串tempSplitedStr = spannableStr.toString();      //全局变量,赋初值for (String keyStr : keyWordsSet) { //为所有关键字增加点击事件findKeyAndSetEvent(spannableStr, tempSplitedStr, keyStr, 0);}Message msg = handler.obtainMessage();msg.what = FLAG_CONVERT_H5TEXT_OVER;msg.obj = spannableStr;handler.sendMessage(msg);}}).start();}/*** 将H5字符串转换成Spanned字符串保证图片的显示。*/private Spanned convertH5TextToSpanned() {return Html.fromHtml(H5String, new Html.ImageGetter() {@Overridepublic Drawable getDrawable(String url) {InputStream is;try {is = (InputStream) new URL(url).getContent();Drawable d = Drawable.createFromStream(is, "src");setDrawableBounds(d, MODE_BASE_WINDOW_WITH);  //设置图片区域is.close();return d;} catch (Exception e) {return null;}}}, null);}/*** 设置图片的区域,必须设置,否则图片不展示** @param d                图片对象* @param withOrHeightMode 宽高模式*/private void setDrawableBounds(Drawable d, int withOrHeightMode) {switch (withOrHeightMode) {case MODE_INTRINSIC:    //根据原图大小进行展示d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());break;case MODE_BASE_WINDOW_WITH: //与屏幕等宽WindowManager wm = getWindowManager();int wmWidth = wm.getDefaultDisplay().getWidth();int picWidth = d.getIntrinsicWidth();int picHeight = d.getIntrinsicHeight();picHeight = (int) (picHeight * (wmWidth / picWidth * 1.0));d.setBounds(0, 0, wmWidth, picHeight);}}/*** 找出单个关键字每一次出现的位置并为其增加点击事件** @param tempSplitedStr 被切割后的新字符串* @param keyStr         关键字* @param preEndIndex    关键词上一次出现时的结束索引/关键字本次在原始字符串中的结束索引*/private void findKeyAndSetEvent(SpannableString spannableString, String tempSplitedStr, final String keyStr,int preEndIndex) {final int startIndex = tempSplitedStr.indexOf(keyStr);     //起始索引if (startIndex != -1) {final int endIndex = startIndex + keyStr.length() - 1;    //终止索引,int startIndexInOgirinal = 0;if (preEndIndex == 0) {    //关键字第一次出现startIndexInOgirinal = startIndex;preEndIndex = endIndex;} else {      //关键字不是第一次出现startIndexInOgirinal = startIndex + preEndIndex + 1;    //加1 是因为截取的字符串索引又是从0开始preEndIndex = startIndexInOgirinal + keyStr.length() - 1;   //减1 是因为起始索引已经占了一个索引}LogUtils.e("在临时字符串中的位置:", startIndex + "/" + endIndex);LogUtils.e("原始字符串中的位置:", startIndexInOgirinal + "/" + preEndIndex);spannableString.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {//点击事件弹窗+请求服务器数据Toast.makeText(ShowH5TextActivity.this, "点我干嘛?关键字:" + keyStr, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(TextPaint ds) {//super.updateDrawState(ds);ds.setColor(Color.RED);      //更改超链接颜色(此颜色要与H5中关键字的 font 颜色一致)ds.setUnderlineText(false);     //不展示下划线}}, startIndexInOgirinal, preEndIndex + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);//}, startIndexInOgirinal, preEndIndex, Spanned.SPAN_INCLUSIVE_INCLUSIVE);  //这样的话,非第一次出现的只会将第一个字符加上超链接tempSplitedStr = tempSplitedStr.substring(endIndex + 1);  //截取字符串,+1 表示从关键词后面截取,不含关键字;不加1 的话从关键词最后一个字开始截取findKeyAndSetEvent(spannableString, tempSplitedStr, keyStr, preEndIndex);     //递归调用}}/*** 获取关键字,并使用Set存储,实现去重*/private HashSet<String> getAllKeyWords() {HashSet<String> keysSet = new HashSet<>();Document document = Jsoup.parse(H5String);Elements elementsList = document.getElementsByTag("font"); //在JSOUP中,Elements类继承自ArrayListif (null != elementsList) {for (Element element : elementsList) {keysSet.add(element.text());}}return keysSet;}
}

四、附录

  • 代码链接:https://github.com/CnPeng/CrazyAndroid ,其中的 b_24_showH5TextInTextView 对应本文内容

  • 另,如果需要给图片加点击事件,可点击参考该链接。该链接中的代码如果使用迅雷下载可能会提示内容违规,可以粘贴下载地址到浏览器自带的下载工具中下载。


http://www.taodudu.cc/news/show-4516942.html

相关文章:

  • 《数据结构与抽象:Java语言描述(原书第4版)》一P.2 说明方法
  • 宾得常用镜头群[转自东河寒梅]
  • 10 ORM 多表操作 查询
  • B树索引,面向海量数据的金钥匙
  • 金*梅商业奇才
  • 苹果一直显示无法连接服务器,苹果6plus无法连接服务器是怎么回事?
  • 苹果7plus专用计算机,iPhone 7 Plus惨了竟用TLC内存?果粉要哭了
  • 苹果6plus性能测试软件,iPhone 6、iPhone6 Plus性能测试
  • 苹果6plus自动时间不准 修复苹果自动设置时间不准教程(图文)
  • 荣耀6plus android6.0,荣耀6PLUS升级安卓6.0(emui4.0)感受
  • 苹果plus HTML高度,苹果6S/6S Plus怎么查看海拔高度?
  • iphone7plus计算机,苹果7 Plus评测:双摄对比苹果7/6sP
  • 捡到的苹果6plus怎么解id要多少钱
  • Iphone 6 plus 刷机
  • 苹果手机测试网络速度的软件,iPhone6怎么看网速?查看苹果6 Plus网速给不给力的方法...
  • iphone修改app名称_iPhone6 plus怎么修改图标名字?苹果6 plus设置修改图标名字教程...
  • 港版plus 6 sim卡显示无服务器,苹果6 plus显示无服务怎么办
  • 苹果6plus几核处理器_全是回忆!苹果12年进化史:21部iPhone你用过哪一款?
  • python cerberus Validator参数校验
  • Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)
  • kerboros协议讲解
  • Prometheus 环境搭建
  • 【Rust日报】 2019-04-09
  • Redis-避免缓存穿透的利器之BloomFilter
  • 今日芯声 | 美团王兴回应不支持支付宝:淘宝为什么不支持微信支付?
  • 深入分析分布式系统中互斥性与幂等性问题
  • 1521_AURIX TC275 FPI总线系统寄存器
  • 黑客利用Apache Struts 2漏洞在服务器上传递Cerberus勒索软件
  • Codasip通过收购Cerberus增强RISC-V处理器设计的安全性
  • Cerberus恶意软件团队解散,10万美元拍卖源代码工程

android:使用TextView展示H5文本(含关键字点击和图片)相关推荐

  1. 使用css3和h5实现幻灯片,点击切换图片效果

    css3代码部分 <style>*{padding: 0;margin: 0;}.box{display: block;width: 300px;height: 70px;}ul{disp ...

  2. Android中富文本用法包括点击事件处理

    Android中富文本用法包括点击事件处理 关于 只需要富文本展示效果,不需要点击事件 展示富文本加点击事件 关于   最近项目需要中需要用到富文本展示及富文本点击功能,先去百度了一下,大多数的说法是 ...

  3. Android自动调整TextView的大小

    In this tutorial, we'll look at how we can implement TextView such that it auto resizes itself based ...

  4. android如何展示富文本_Android中如何在textView实现富文本

    怎么在textView中实现类似这样的文本??要求可以点击跳转. 代码如下: xml中: android:id="@+id/tv_one" android:layout_width ...

  5. C语言对文本进行断句,用TextView实现富文本展示,点击断句和语音播报

    最近有一个需求:移动端需要展示用户在PC端做的笔记,而笔记内容是富文本形式--有图片,有文字,文字可以设置颜色.加粗.倾斜等等.同时,用户点击的时候能够语音朗读所点击的当前整句的内容. 第一反应就是富 ...

  6. android 获取布局textview,android – 获取TextView中文本的位置

    看看几个Paint方法: getTextBounds()和 measureText.我们可以使用它们来确定TextView中文本的偏移量.确定TextView中的偏移后,我们可以将其添加到TextVi ...

  7. [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决?

    [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决? window.addEventListener("resize", function () {if ...

  8. android 多个textview,Android:多个textview像单个文本

    需要格式化几个textview像一个又一个独特的文本块,有没有办法实现这个?Android:多个textview像单个文本 这样 __________________________ | | | | ...

  9. Android TextView设置多样式文本,跑马灯以及霓虹灯效果

    1.设置TextView字体颜色 1)使用Html标签方式设置 代码如下: tvTest1.setText(Html.fromHtml("电影<font color = blue> ...

最新文章

  1. HDOJ How many ways?? 2157【矩阵高速幂】
  2. 【原创】用户空间死循环导致memcached访问变慢问题排查
  3. 高级指令——hostname指令【作用:操作服务器的主机名(读取、设置)】、id指令【查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…)】、whoami指令、ps -ef指令
  4. JavaScript——获取浏览器滚动条(ScrollBar)宽度
  5. 哈希表(hashtable)的javascript简单实现
  6. C++ Vecctor容器浅析
  7. 品质标签分几种颜色_常见标签种类分析
  8. Cloud Prizefight: OpenStack vs. VMware(转)-HA-FT
  9. BlackBerry Key2 键盘扩展
  10. 平面设计师必备,剪纸风格素材
  11. oracle 无效数字 0,oracle to_namber之后报ora-01722:无效数字
  12. 在.net core 2.0中生成exe文件
  13. 提权、渗透、经验、技巧总结大全三
  14. alanwang[GDOU] 简单练习 判断一个年份是否为闰年
  15. 故乡的原风景-宗次郎
  16. vb6.0企业版win7_教你安装纯净版windows系统
  17. Ubuntu 18.04.1 LTS 安装网易云音乐,告别图标无法点击
  18. linux u盘插入事件,Linux 下监控USB设备拔插事件
  19. NCBI中对所有原核生物ANI计算的统计结果简单讲解
  20. 新生入学时遇到声称可以帮助代办入学手续进而代收学费的“老师”等,不能采取以下哪种方式应对?()

热门文章

  1. Zigbee应用开发 协调器控制多个终端
  2. matlab求表达式绝对值,matlab绝对值怎么表示
  3. 一阶常系数微分方程组的笔记
  4. Oracle中Blob和Clob类型的区别
  5. 计算机学院篮球队介绍,计算机与信息学院男子篮球队荣获“抗疫杯”校篮球赛冠军采访纪实...
  6. 2021-05-19 ASP.NET Core笔试题 请问对EFCore有了解吗?
  7. 2023年,重新扬帆起航!
  8. Java项目的代码如何实现?
  9. 澳大利亚史上最大数据泄露事件,40%的居民信息被泄露
  10. 【初入前端】第四课 课前预习