开发奇淫巧技Tips(Android篇)
生活随笔
收集整理的這篇文章主要介紹了
开发奇淫巧技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篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GreenDao高级用法
- 下一篇: (一) 自带刷新的列表-LtRecycl