【Android】用户协议和隐私政策的加载

在Android应用的登录页面通常包含用户协议和隐私政策。文章介绍了通过在本地放置txt文件加载这些内容的方法,利用XML布局显示,通过NestedScrollView处理长文本滚动。同时,提到了使用开源库RichText进行更复杂格式的支持,以及如何设置和管理内存缓存。
摘要由CSDN通过智能技术生成

前言

在app的登录页面,一般都会有用户协议和隐私政策这两个提示,虽然大家在使用的时候基本上没人会看这个,但是这个甩锅声明还是需要存在的。

声明加载

在这里插入图片描述
这是声明的截图,使用的是app里面放一个txt文件,这种优点是加载起来比较方便,也不用请求网络,直接在本地就完事了,但是缺点就是修改不容易,如果需要修改某个协议内容的话要更新一下应用版本。但是咱就是说啊,谁没事经常修改这玩意。

实现

主要是需要将txt文件中的数据读取出来
1.创建一个xml显示界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#4DE2E3E5"
    android:orientation="vertical">

    //这是显示用户协议还是隐私政策的标题头
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:gravity="center"
        android:textColor="@color/black"
        android:textSize="15sp" />

    // 因为我们的文字数据太多,所以需要做一个滑动,这样才能让文字显示全
    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        
        //显示文字主体
        <TextView
            android:id="@+id/tv_read"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="15dp"
            android:layout_marginEnd="15dp"
            android:textColor="#666666"
            android:textSize="12sp" />
    </androidx.core.widget.NestedScrollView>

    <TextView
        android:id="@+id/tv_ok"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="80dp"
        android:layout_marginTop="25dp"
        android:layout_marginEnd="80dp"
        android:layout_marginBottom="15dp"
        android:background="@drawable/login_btn_select_bg"
        android:clickable="true"
        android:focusable="true"
        android:gravity="center"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:text="确 定"
        android:textColor="@drawable/login_btn_text_bg"
        android:textSize="16sp" />
</LinearLayout>

2.读取工具类,读取txt文件,输出一个String字符串。

public class ReadTxtUtil {

    /**
     * 读取本地Txt文本
     *
     * @return 字符串
     */
    public static String readTxt(Context mContext, String txtAddress) {
        AssetManager manager = mContext.getAssets();
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            InputStream inputStream = manager.open(txtAddress);
            int i = inputStream.read();
            while (i != -1) {
                baos.write(i);
                i = inputStream.read();
            }
            return baos.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

3.准备txt文件。
这里我们将txt文件放在【assets】文件夹下面,要是项目没有的话需要自己创建一个。在【main】目录下面,和【java】目录同级。
在这里插入图片描述

4.显示

       // isAgreement 判断是否是用户协议
        when (isAgreement) {
            true -> {
                binding.tvTitle.text = "用户协议"
                val txt = ReadTxtUtil.readTxt(this, "agreement.txt")
                binding.tvRead.text = txt
            }
            else -> {
                binding.tvTitle.text = "隐私政策"
                val txt = ReadTxtUtil.readTxt(this, "privacypolicy.txt")
                binding.tvRead.text = txt
            }
        }

当然这里面加载的只是一个单独的文本,如果需要显示一些其他的就不行,我们可以使用一个开源库来解决这个需求

开源库
implementation 'com.zzhoujay.richtext:richtext:3.0.7'

基本使用

//接上面的设定
RichText.fromMarkdown(txt).bind(this).into(binding.tvRead)

注意使用这个之后,需要记得销毁

// 在onDestory时(这个必要)
RichText.clear(context);
//在应用退出时调用(这个一般不用)
RichText.recycle();
扩展

1.设置数据类型

// 设置为Html
RichText.fromHtml(text).into(textView);
// 设置为Markdown
RichText.fromMarkdown(text).into(textView);

2.RichText的使用方式

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实现
   .bind(tag) // 绑定richText对象到某个object上,方便后面的清理
   .done(callback) // 解析完成回调
   .into(textView); // 设置目标TextView
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值