android只Textiew显示Html文本(2),安卓架构师面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

handleBr(mSpannableStringBuilder);

}  else  if (tag.equalsIgnoreCase(“p”)) {

handleP(mSpannableStringBuilder);

}  else  if (tag.equalsIgnoreCase(“div”)) {

handleP(mSpannableStringBuilder);

}  else  if (tag.equalsIgnoreCase(“em”)) {

end(mSpannableStringBuilder, Bold. class,  new StyleSpan(Typeface.BOLD));

}  else  if (tag.equalsIgnoreCase(“b”)) {

end(mSpannableStringBuilder, Bold. class,  new StyleSpan(Typeface.BOLD));

}  else  if (tag.equalsIgnoreCase(“strong”)) {

end(mSpannableStringBuilder, Italic. class,  new StyleSpan(Typeface.ITALIC));

}  else  if (tag.equalsIgnoreCase(“cite”)) {

end(mSpannableStringBuilder, Italic. class,  new StyleSpan(Typeface.ITALIC));

}  else  if (tag.equalsIgnoreCase(“dfn”)) {

end(mSpannableStringBuilder, Italic. class,  new StyleSpan(Typeface.ITALIC));

}  else  if (tag.equalsIgnoreCase(“i”)) {

end(mSpannableStringBuilder, Italic. class,  new StyleSpan(Typeface.ITALIC));

}  else  if (tag.equalsIgnoreCase(“big”)) {

end(mSpannableStringBuilder, Big. class,  new RelativeSizeSpan(1.25f));

}  else  if (tag.equalsIgnoreCase(“small”)) {

end(mSpannableStringBuilder, Small. class,  new RelativeSizeSpan(0.8f));

}  else  if (tag.equalsIgnoreCase(“font”)) {

endFont(mSpannableStringBuilder);

}  else  if (tag.equalsIgnoreCase(“blockquote”)) {

handleP(mSpannableStringBuilder);

end(mSpannableStringBuilder, Blockquote. class,  new QuoteSpan());

}  else  if (tag.equalsIgnoreCase(“tt”)) {

end(mSpannableStringBuilder, Monospace. class,

new TypefaceSpan(“monospace”));

}  else  if (tag.equalsIgnoreCase(“a”)) {

endA(mSpannableStringBuilder);

}  else  if (tag.equalsIgnoreCase(“u”)) {

end(mSpannableStringBuilder, Underline. class,  new UnderlineSpan());

}  else  if (tag.equalsIgnoreCase(“sup”)) {

end(mSpannableStringBuilder, Super. class,  new SuperscriptSpan());

}  else  if (tag.equalsIgnoreCase(“sub”)) {

end(mSpannableStringBuilder, Sub. class,  new SubscriptSpan());

}  else  if (tag.length() == 2 &&

Character.toLowerCase(tag.charAt(0)) == ‘h’ &&

tag.charAt(1) >= ‘1’ && tag.charAt(1) <= ‘6’) {

handleP(mSpannableStringBuilder);

endHeader(mSpannableStringBuilder);

}  else  if (mTagHandler !=  null) {

mTagHandler.handleTag( false, tag, mSpannableStringBuilder, mReader);

}

}

复制代码

通过源码可以看到,除了默认的一些标签,其还支持自定义标签;看下面代码:

else  if (mTagHandler !=  null) {

mTagHandler.handleTag( false, tag, mSpannableStringBuilder, mReader);

}

系统会调用mTagHandler的handleTag方法。所以,我们可以实现此接口,来解析自己定义的标签类型。

具体的,自己可以看一下下面实例:

复制代码

package com.mxgsa.tvimg;

import org.xml.sax.XMLReader;

import android.content.Context;

import android.content.Intent;

import android.text.Editable;

import android.text.Html.TagHandler;

import android.text.Spanned;

import android.text.style.ClickableSpan;

import android.view.View;

import android.view.View.OnClickListener;

public  class MxgsaTagHandler  implements TagHandler{

private  int sIndex = 0;

private   int eIndex=0;

private  final Context mContext;

public MxgsaTagHandler(Context context){

mContext=context;

}

public  void handleTag( boolean opening, String tag, Editable output, XMLReader xmlReader) {

//  TODO Auto-generated method stub

if (tag.toLowerCase().equals(“mxgsa”)) {

if (opening) {

sIndex=output.length();

} else {

eIndex=output.length();

output.setSpan( new MxgsaSpan(), sIndex, eIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

}

}

}

private  class MxgsaSpan  extends ClickableSpan  implements OnClickListener{

@Override

public  void onClick(View widget) {

//  TODO Auto-generated method stub             // 具体代码,可以是跳转页面,可以是弹出对话框,下面是跳转页面

mContext.startActivity( new Intent(mContext,MainActivity. class));

}

}

}

复制代码

调用页面:

复制代码

package com.mxgsa.tvimg;

import android.app.Activity;

import android.os.Bundle;

import android.text.Html;

import android.text.method.LinkMovementMethod;

import android.widget.TextView;

public  class MxgsaActivity  extends Activity{

private TextView tView;

@Override

public  void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.mxgsa_activity);

findControl();

setData();

}

private  void findControl() {

tView = (TextView) findViewById(R.id.tvImage);

}

private  void setData() {

//  TODO Auto-generated method stub

final String sText = “测试自定义标签:

测试自定义标签

”;

tView.setText(Html.fromHtml(sText,  null,  new MxgsaTagHandler( this)));

tView.setClickable( true);
tView.setMovementMethod(LinkMovementMethod.getInstance());
}

最后

最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2020-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。

还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

一起互勉~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-ylxxzvXm-1713714158575)]

一起互勉~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-P8Gdc1Xt-1713714158575)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值