随着kotlin的推廣,越來越多的kotlin文檔可以在網上看到,今天就為大家分享一個基本的kotlin自定義view,首先Android studio配置kotlin的開發環境我就不細說了,因為網上類似這種文章太多了,随便一篇都可以幫你搞定。
開發中對于一些經常用到的控件,都可以考慮封裝成一個基本的view,然後在使用的時候直接使用,不需要再一個個控件的組裝,不僅節省了開發的時間,代碼看起來也會更調理些,下面分享一下我平常封裝view的方法,其實在我的第一篇部落格裡已經有使用,那個自定義的OperateView就是一個View的封裝,在那塊的使用時為了後續的邏輯處理友善,今天用kotlin的形式來簡單封裝一下公用View。如果沒有看過OperateView的童鞋,可以抽時間看看
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuUWdn52b09CX0xWdhZWZk9CX09Wbl9lcvRXakVGa49CXy9GdpRWZoh3LcRXZu5ibkN3Yuc2bsJmLjlGdhR3cvw1LcpDc0RHaiojIsJye.gif)
可換行的AutoBreakViewGroup擴充
下面直接上代碼:
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import kotlinx.android.synthetic.main.view_add_delete.view.*
/**
* Created by bobo on 2017/11/29.
*/
open class AddAndDeleteView(context: Context) : FrameLayout(context) {
init {
init(context)
}
constructor(context: Context,attributes: AttributeSet):this(context){
init(context,attributes)
}
fun init(context: Context,attributes: AttributeSet?=null){
LayoutInflater.from(context).inflate(R.layout.view_add_delete,this,true)
initEvent()
}
fun initEvent(){
bt_add.setOnClickListener{
if(miClickCallBack!=null){
miClickCallBack.add()
}
}
bt_delete.setOnClickListener{
if(miClickCallBack!=null){
miClickCallBack.delete()
}
}
}
lateinit var miClickCallBack:IClickCallBack
fun initICallBack(iClickCallBack:IClickCallBack){
miClickCallBack=iClickCallBack
}
interface IClickCallBack{
fun add()
fun delete()
}
}
首先自定義一個View然後繼承于FrameLayout,構造方法的選擇:一般在代碼中使用的話,我是隻重寫第一個構造方法,但是如果在xml布局中寫的話必須要重寫第二個構造方法。如果沒有重寫的話會報一個android.view.InflateException錯誤,當你看到這個錯誤的時候說明就是你xml布局出錯了。因為安卓系統解析xml檔案的時候,會預設調用第二個構造方法。切記,切記,切記重要的事情說三遍。
kotlin中可以省去findViewById方法的關鍵代碼import kotlinx.android.synthetic.main.你的布局檔案名.*,然後在代碼中就不用在寫無聊的findViewById()方法,直接控件id.就可以調用。 這個确實比以前的java友善了不少。另外對于bt_add.setOnClickListener{}這種寫法,其實是一種叫Lambda表達式和擴充函數結合的寫法,如果感興趣大家也可以去學學,挺友善的。定義一個IClickCallBack接口是為了友善使用接口回調來處理一些自定義View中的點選事件處理邏輯。好了,整體的思路和代碼就是這些,最後再來個調用的代碼,就結束了,如果也有在使用kotlin開發的童鞋,可以和我一起讨論遇到的問題和難點,我也是新手,呵呵,期待一起進步
。
bt_click.setOnClickListener{
zdyView= object : AddAndDeleteView(this@TestActivity){}
zdyView.initICallBack(object : AddAndDeleteView.IClickCallBack{
override fun delete() {
toast("您點選了删除")
}
override fun add(){
toast("您點選了添加")
}
})
container.addView(zdyView)
}
一個簡單的點選事件,然後執行個體化自定義的view,執行個體化接口對象,實作裡面的方法,處理邏輯。完成