欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

开发奇淫巧技Tips(Android篇)

发布时间:2025/3/21 Android 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 开发奇淫巧技Tips(Android篇) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

没事会记录下开发的奇淫巧技,每个tips前都会标明开发语言,有更多更好的奇淫巧技可以发评论或者私聊,可以添加进来

1.Kotlin:View调用此方法传入url加载网络图片,如果是ImageView则加载前景,否则加载背景

/*** View调用此方法传入url加载网络图片,如果是ImageView则加载前景,否则加载背景*/ fun View.loadUrl(url: String, isCenter: Boolean = false, isYuan: Boolean = false, errorImgId: Int = 0) {val g = Glide.with(this.context).load(url)if (isCenter)g.centerCrop()if (isYuan)g.transform(GlideCircleTransform(this.context))if (errorImgId != 0)g.error(errorImgId)g.dontAnimate()if (this is ImageView) {g.into(this)} else {g.into(object : ViewTarget<View, GlideDrawable>(this) {override fun onResourceReady(resource: GlideDrawable,glideAnimation: GlideAnimation<in GlideDrawable>) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)this.view.background = resource.currentelsethis.view.setBackgroundDrawable(resource.current)}})} }fun View.loadId(id: Int, isCenter: Boolean = false, isYuan: Boolean = false) {val g = Glide.with(this.context).load(id)if (isCenter)g.centerCrop()if (isYuan)g.transform(GlideCircleTransform(this.context))g.dontAnimate()if (this is ImageView) {g.into(this)} else {g.into(object : ViewTarget<View, GlideDrawable>(this) {override fun onResourceReady(resource: GlideDrawable,glideAnimation: GlideAnimation<in GlideDrawable>) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)this.view.background = resource.currentelsethis.view.setBackgroundDrawable(resource.current)}})} }

使用:

View.loadUrl("www.xxx.jpg")

2.Kotlin:检查值输入值是否为空(比如检查登陆页面的所有数据是否已填)

/*** 检查值输入值是否为空*/ fun TextView.checkEmpty(msg: String, nextTV: TextView?= this): TextView? {return if (TextUtils.isEmpty(this.text)) ToastUtil.showToast2(msg) else return nextTV } public static TextView showToast2(String text) {//java:调用一个弹toast的类,并返回一个null的TextViewshowToast(text);return null; }

使用:

if (tvName.checkEmpty("请选择产品", tvPerson)?.checkEmpty("请选择客户", etMoney)?.checkEmpty("请输入金额") != null) {//表示全部验证通过,不通过会走else }

3.Kotlin:如果RecyclerView只有一种条目,可以使用该方法简化代码

abstract class BaseAdapterOneType<T>(var context: Context, var list: ArrayList<T>?, var itemLayoutId: Int) : RecyclerView.Adapter<BaseLtViewHolder>() {abstract fun setData(v: View, b: T, i: Int)override fun onBindViewHolder(holder: BaseLtViewHolder?, position: Int) {setData(holder!!.itemView, list!![position], position)}override fun getItemCount() = ListUtil.getSize(list)override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = BaseLtViewHolder(parent?.autoInflate(itemLayoutId)!!)//autoInflate()是一个自定义的Inflate方法 }class BaseLtViewHolder(view: View) : RecyclerView.ViewHolder(view)

使用:实现该抽象类,并在父类的最后一个参数传入条目的布局

class MAdapter1(context: Context, list: ArrayList<ClassInfoBean.LzBean>?) : BaseAdapterOneType<ClassInfoBean.LzBean>(context, list, R.layout.item_class_xlw) {override fun setData(v: View, b: ClassInfoBean.LzBean, i: Int) {//可以在该方法内实现绑定数据,可以大大简化代码和开发时间v.ivBack.loadUrl(b.img_url, true, errorImgId = R.drawable.img)v.tv.text = b.namev.setOnClickListener {}}}

4.Kotlin:防止重复点击(有的人可能会手抖连点两次,造成奇怪的bug)

fun View.click(time: Int = 500, click: () -> Unit) {this.setOnClickListener {val mTime = this.tagif (mTime == null) {//直接可以执行this.tag = System.currentTimeMillis()click()return@setOnClickListener}if (mTime is Long) {//判断时间后可以执行val thisTime = System.currentTimeMillis()if (thisTime - mTime > time) {click()}//否则就是在时间间隔内this.tag = thisTime}} }

使用:就像正常的监听

tv_title.click { }

5.Kotlin:快捷获取资源文件

/*** strings.xml的id转换为String值*/ fun Int.toText(): String = App.getInstance().resources.getString(this)/*** colors.xml中的id转化为color色值*/ fun Int.toColor(): Int = App.getInstance().resources.getColor(this)/*** dimens.xml中的id转化为px值*/ fun Int.toDimen(): Float = App.getInstance().resources.getDimension(this)

使用:

tv_title.text = R.string.no_data.toText()

总结

以上是生活随笔为你收集整理的开发奇淫巧技Tips(Android篇)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。