EasyAndroid基础集成组件库之:EasyToast 简化你的Toast操作

什么是EasyToast

EasyToast是开源基础组件集成库EasyAndroid中的基础组件之一。用于进行简化Toast操作

EasyAndroid作为一款集成组件库,此库中所集成的组件,均包含以下特点,你可以放心使用~~

  1. 精简: 作为一款集成库,我不希望有那种大组件,尽量控制好集成库的大小。不要有冗余代码
  2. 内聚: 尽量减少甚至避免单一组件对别的模块进行依赖。做到组件间独立。

得益于良好的高内聚性,若你只需要使用EasyToast. 那么可以直接去copy EasyToast源码文件到你的项目中,直接进行使用,也是没问题的~

特性

  1. 非常方便的进行Toast样式定制
  2. 可直接在任意线程中进行使用
  3. 当有新消息需要展示时。进行即时刷新。无需等待

用法

使用默认样式

我们来与原生使用方式进行下对比:

1. 原生方式

一般来说。使用默认样式时,我们通常都是使用下方的代码进行toast展示:

Toast.makeText(context, message, duration).show()
2. EasyToast方式

而对于EasyToast而言。我们只需要像下面这样调用即可:

EastToast.newBuilder().build().show(message)

或者使用资源id:

EasyToast.newBuilder().build().show(R.string.message)

当然,这个时候有人可能会说了。你这样也没比原生方式方便多少嘛!hold on! 别急。

由于这种使用默认Toast的场景很多。所以这里我在EasyToast类中默认提供了DEFAULT实例进行直接使用:

EasyToast.DEFAULT.show(message)

这样是不是就很简洁很一目了然了?

使用自定义样式

1. 原生方式

我们先来看,使用原生的方式进行toast定制应该是怎么样的:

// 1. 创建Toast实例
val toast = Toast(context)
// 2. 获取自定义布局与用于展示的文本控件
val container = LayoutInflater.from(context).inflate(R.layout.custom_toast, null)
val tv = container.findViewById(R.id.toast_tv)
// 3. 将控件与toast实例绑定
toast.view = contaienr
toast.duration = Toast.LENGTH_SHORT

// 最后设置值进行展示:
tv.setText(message)
toast.show()
2. EasyToast方式
// 创建实例时直接指定资源文件即可
EasyToast.newBuilder(R.layout.custom_toast, R.id.toast_tv)
	.build().show(message)

可以看到。与默认样式相比。在进行自定义样式使用时,EasyToast能节省更多的代码。

当然,上面的写法,将创建与展示放在一起的做法,是不推荐的。推荐的方式是进行一次二次封装. 将项目中所需要使用到的所有toast样式进行统一管理:

object ToastTools {
    val default:EasyToast = EasyToast.DEFAULT// 默认样式
    val customForNetwork:EasyToast by lazy {// 网络层独有样式
        return EasyToast.newBuilder(R.layout.network_toast, R.id.toast_tv).build()
    }
    // 更多的样式
    ... 
}

添加gravity与duration配置

既然是对Toast的封装, 那么Toast本身自带的gravityduration配置当然也是支持的。

为了方式使用时产生混乱。EasyToast只支持在进行实例创建时进行属性配置:

val toast = EasyToast.newBuilder()
	// 设置gravity. 参考Toast#setGravity(gravity, offsetX, offsetY)方法
	.setGravity(gravity:Int, offsetX:Int, offsetY:Int)
	// 设置duration.参考Toast#setDuration(duration)方法
	.setDuration(Toast.LENGTH_SHORT | Toast.LENGTH_LONG)
	.build()

与原生toast相比的更多优势:

1. 在任意位置进行toast展示:

正如你上面看到的:EasyToast的展示。不再像原生toast一样。需要依赖外部传入context实例进行UI展示。而是直接指定具体的数据即可,这在一些工具库中需要进行展示时。是个很棒的特性:

EasyToast.DEFAULT.show(message)
2. 在任意线程进行toast展示:

这点是原生所不能比的。使用原生的Toast。你必须在UI线程中进行toast的创建与展示

而EasyToast则没有此顾虑:因为对于EasyToast来说。toast的创建与展示。都是会被派发到主线程进行操作的:

fun show(message:String) {
	...
	if (Looper.myLooper() == Looper.getMainLooper()) {
	    showInternal(result)
	} else {
	    mainHandler.post { showInternal(result) }
	}
}
3. 即时更新toast文案

让我们来展示一个在子线程中连续展示toast文案的案例:

executor.execute {
    for (index in 0..10) {
        EasyToast.DEFAULT.show("自动更新无延迟提醒:$index")
        Thread.sleep(300)
    }
    default.show("循环完毕")
}

效果展示


作者:Haoge
链接:https://juejin.im/post/5b0638336fb9a07aa9261ce6
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值