开发奇淫巧技Tips(Android篇)

46 篇文章 1 订阅
20 篇文章 1 订阅

没事会记录下开发的奇淫巧技,每个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.current
                else
                    this.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.current
                else
                    this.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的TextView
    showToast(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.name
            v.setOnClickListener {
            }
        }
    }

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

fun View.click(time: Int = 500, click: () -> Unit) {
    this.setOnClickListener {
        val mTime = this.tag
        if (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()

对Kotlin或KMP感兴趣的同学可以进Q群 101786950

如果这篇文章对您有帮助的话

可以扫码请我喝瓶饮料或咖啡(如果对什么比较感兴趣可以在备注里写出来)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值