Android 富文本的RichText框架使用(含Demo)

前言

按照项目需求 有部分显示需要用到富文本 富文本?
什么是富文本!?于是各种搜索资料…
看完之后 还是一脸懵逼 不知道怎么用
了解到大概意思就是用我们的TextView可以加载Html的文本信息
往后看Android平台下的富文本解析器,支持Html和Markdown

RichText框架了解一下

博文下方 有导入库的地址
这个框架确实好 星星人数2400+
说明得到了大多数人的认可 仔细阅读了一下里面的方法 以及说明

使用方法

RichText
       .from(text) // 数据源
       .type(RichText.TYPE_MARKDOWN) // 数据格式,不设置默认是Html,使用fromMarkdown的默认是Markdown格式
       .autoFix(true) // 是否自动修复,默认true
       .autoPlay(true) // gif图片是否自动播放
       .showBorder(true) // 是否显示图片边框
       .borderColor(Color.RED) // 图片边框颜色
       .borderSize(10) // 边框尺寸
       .borderRadius(50) // 图片边框圆角弧度
       .scaleType(ImageHolder.ScaleType.FIT_CENTER) // 图片缩放方式
       .size(ImageHolder.MATCH_PARENT, ImageHolder.WRAP_CONTENT) // 图片占位区域的宽高
       .fix(imageFixCallback) // 设置自定义修复图片宽高
       .fixLink(linkFixCallback) // 设置链接自定义回调
       .noImage(true) // 不显示并且不加载图片
       .resetSize(false) // 默认false,是否忽略img标签中的宽高尺寸(只在img标签中存在宽高时才有效)
       true:忽略标签中的尺寸并触发SIZE_READY回调,false:使用img标签中的宽高尺寸,不触发SIZE_READY回调
       .clickable(true) // 是否可点击,默认只有设置了点击监听才可点击
       .imageClick(onImageClickListener) // 设置图片点击回调
       .imageLongClick(onImageLongClickListener) // 设置图片长按回调
       .urlClick(onURLClickListener) // 设置链接点击回调
       .urlLongClick(onUrlLongClickListener) // 设置链接长按回调
       .placeHolder(placeHolder) // 设置加载中显示的占位图
       .error(errorImage) // 设置加载失败的错误图
       .cache(Cache.ALL) // 缓存类型,默认为Cache.ALL(缓存图片和图片大小信息和文本样式信息)
       .imageGetter(yourImageGetter) // 设置图片加载器,默认为DefaultImageGetter,使用okhttp实现
       .imageDownloader(yourImageDownloader) // 设置DefaultImageGetter的图片下载器
       .bind(tag) // 绑定richText对象到某个object上,方便后面的清理
       .done(callback) // 解析完成回调
       .into(textView); // 设置目标TextView

释放资源

// 加载富文本
RichText.from(text).bind(activity).into(textView);

// activity onDestory时
RichText.clear(activity);

在应用退出时调用RichText.recycle();

注意↓↓↓

在第一次调用RichText之前:
@1. 先调用RichText.initCacheDir()方法设置缓存目录.
@2. ImageFixCallback的回调方法不一定是在主线程回调
@3. 注意不要进行UI操作
@4. 本地图片由根路径\开头,Assets目录图片由file:///android_asset/开头
@5. Gif图片播放不支持硬件加速,若要使用Gif图片请先关闭TextView的硬件加速

textView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Demo演示

public class HeadlineCommentActivity extends AppCompatActivity {
    TextView tvHeadlineContent;
    private static final String TEST_CONTENT = 
    "
\n" + " 临阵换帅对上抠门足协,西班牙与葡萄牙一战,场外因素更吸睛\n" + "
篮球快报
百家号 06-15 15:01
\n" + " 如果问世界杯小组赛期间最劲爆的对决是哪一组? 估计十之八九的中立球迷在期待着西班牙 与葡萄牙之间的双牙之争。这两支夺冠的热门球队,都是出自伊比利亚半岛,真可谓是同根同源 。两支球队也各有特色,西班牙群星云集,而葡萄牙则拥有“绝代双骄”之一的C罗。\n" + "
\n" + " 西班牙的阵容堪称豪华:德赫亚一夫当关;卡尔哈尔、阿尔巴双翼齐飞;皮克看穿一切; 拉莫斯固若金汤;伊涅斯塔老骥伏枥;布斯克斯左右逢源;大卫席尔瓦人球合一; 迭戈科斯塔宛如战兽……还有伊斯科、阿森西奥等年轻俊杰,随时能为球队提供活力。\n" "
\n" + " 而葡萄牙则是C罗一个人的球队。C罗身为当世最好的两位超巨之一, 无论何时何地,他都有着摧毁对手防线的魔力。只要给他一点点的机会或者是空隙, 他都有办法杀死比赛的悬念。\n" + "
\n" + " 最佳球队对阵最佳球员,这种比赛放在任何时代都是焦点中的焦点。 不过,就是这样的一场堪称火星撞地球的较量,却被双方的场外因素给吸了睛。"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.item_headline_like_layout); RichText.initCacheDir(this); init(); } private void init() { tvHeadlineContent = findViewById(R.id.tv_headline_content); RichText.from(TEST_CONTENT).bind(this) .showBorder(false) .size(ImageHolder.MATCH_PARENT, ImageHolder.WRAP_CONTENT) .into(tvHeadlineContent); } @Override protected void onDestroy() { super.onDestroy(); RichText.clear(this); } }

Demo效果图

再来描述 RichText框架使用

以上内容 都是我在刚接触的时候 算是练手的一个demo 没有操作流程 下面我重新写一下流程

第一步 导入库

因每个人的studio版本不一样 系统可能会让你做版本调整 按照提示 自行调整即可

implementation 'com.zzhoujay.richtext:richtext:3.0.7'

第二步 布局配置

注意 :因为富文本 肯定不是一两行的文字
都是长篇大论的那种 所以需要加一个滑动 不然根本显示不下

 

        
    

第三步 代码中使用

里面的很多方法 在上文中 我已经贴出来了 按照需求自己设置

 private void init() {
        mToolbar = findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        if (getSupportActionBar() != null) getSupportActionBar()
        .setDisplayShowTitleEnabled(false);
        ActivityUtils.addToolbarTitle(this, mToolbar, "田园头条");
        mToolbar.setNavigationOnClickListener(view -> onBackPressed());
        //在第一次调用RichText之前先调用RichText.initCacheDir()方法设置缓存目录,不设置会报错
        RichText.initCacheDir(this);
        //这里是取后台返回的集合数据
        headLineArticleList = getIntent().getParcelableArrayListExtra(EXTRA_TYPE_ARTICLE);
        mTvHeadlineContent = findViewById(R.id.tv_headline_content);
        for (int i = 0; i < headLineArticleList.size(); i++) {
            Article article = headLineArticleList.get(i);
           String textContent = article.getContent();//获取一个字符串的文本内容
        }
        RichText.from(textContent).bind(this)
                .showBorder(false)
                .size(ImageHolder.MATCH_PARENT, ImageHolder.WRAP_CONTENT)
                .into(mTvHeadlineContent);
    }

结尾

 @Override
    protected void onDestroy() {
        super.onDestroy();
        //结束时清空内容
        RichText.clear(this);
    }

富文本效果图

可上下滑动 支持复制图片 复制文本内容 等等!
Android 富文本的RichText框架使用(含Demo)_第1张图片

与君共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
这里写图片描述

你可能感兴趣的:(Android,技术)