擴展Anko,支持更更多控件

寫在前面

JetBrains在給我們帶來Kotlin的同時,也給我們帶來了一個可以讓你的Android應(yīng)用變得更簡單,更便捷的庫-----Anko(https://github.com/Kotlin/anko),初識Anko,很多地方還不太理解,目前只接觸了Anko Layouts,覺得相見恨晚.
本文代碼已上傳至https://github.com/Xxxxxxyk/DouCat/tree/xyk

用Anko寫布局

Android中的布局有兩種書寫方式,一種是在代碼里寫,不過至今為止我還沒見過記過,第二種就是用XML書寫,但是傳統(tǒng)的XML書寫布局,一旦遇上復(fù)雜截面,會導(dǎo)致onCreate方法執(zhí)行緩慢,高耗電,大部分代碼無法復(fù)用等痛點,在Kotlin中,這些痛點不復(fù)存在,官方稱之為Anko DSL,在github給出了一個例子:

DSL (Domain Specific Language)
領(lǐng)域相關(guān)語言
https://en.wikipedia.org/wiki/Domain-specific_language

verticalLayout {
    val name = editText()
    button("Say Hello") {
        onClick { toast("Hello, ${name.text}!") }
    }
}

很簡單的一個布局,點擊按鈕用吐司彈出文本框內(nèi)容,為了對比,我們把這個布局用傳統(tǒng)的Java寫出來:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Say Hello!"/>

</LinearLayout>

光布局就超過了不知道多少行代碼,立馬高下立判.

擴展

上面只是一個簡單的例子,接下來可以嘗試寫一個復(fù)雜一些的布局進行練手

relativeLayout {
            toolbar {
                id = ViewID.TOOL_BAR
                title = ""
                backgroundResource = R.color.colorPrimary
                relativeLayout {
                    imageView {
                        imageResource = R.mipmap.logo_icon
                    }.lparams(width = 200) {
                        height = 120
                    }

                    linearLayout {
                        orientation = LinearLayout.HORIZONTAL
                        gravity = Gravity.CENTER_VERTICAL
                        imageView {
                            imageResource = R.drawable.img_message
                            isClickable = true
                        }.lparams(width = 60, height = 60) { rightMargin = 35 }
                        imageView {
                            imageResource = R.drawable.img_history
                            isClickable = true
                        }.lparams(width = 60, height = 60) { rightMargin = 35 }
                        imageView {
                            imageResource = R.drawable.img_scanner
                            isClickable = true
                        }.lparams(width = 60, height = 60) { rightMargin = 35 }
                        imageView {
                            imageResource = R.drawable.img_search
                            isClickable = true
                        }.lparams(width = 60, height = 60) { rightMargin = 35 }

                    }.lparams(height = matchParent) {
                        width = wrapContent
                        alignParentRight()
                    }
                }
            }.lparams(width = matchParent) {
                height = 120
            }

            frameLayout {
                id = ViewID.FL_FRAGMENT
            }.lparams(width = matchParent, height = matchParent) {
                below(ViewID.TOOL_BAR)
                above(ViewID.BNV_BOTTOM)
            }
            bnv_btn = bottomNavigationView {
                id = ViewID.BNV_BOTTOM
                backgroundColor = android.R.attr.windowBackground
                inflateMenu(R.menu.navigation)
            }.lparams(width = matchParent) {
                height = wrapContent
                alignParentBottom()
            }
        }
    }
image.png

上面的布局中用到的Android Support Library 25中的新增控件BottomNavigationView,這個控件在Anko中默認是不被支持的,可以通過非常簡單的兩句代碼,讓Anko對該控件進行支持,同理也適用于自定義控件:

//讓Anko支持BottomNavigationView
    public inline fun ViewManager.bottomNavigationView(theme: Int = 0) = bottomNavigationView(theme) {}

    public inline fun ViewManager.bottomNavigationView(theme: Int = 0, init: BottomNavigationView.() -> Unit) = ankoView({ BottomNavigationView(it) }, theme, init)

加入上面兩行代碼,就可以在Anko中使用自定義控件了.

預(yù)覽Anko Layout

我們在用Anko編寫布局時會發(fā)現(xiàn),不像以往用XML編寫布局時支持預(yù)覽,造成了想預(yù)覽布局就需要運行一次,但是這么一個優(yōu)秀的庫怎么會沒有解決辦法呢,可以在File -> Setting -> Plugins中安裝 Anko Support插件,安裝完成后重啟Android Studio,開啟下面選項即可進行預(yù)覽布局,目前只支持2.4版本,3.0版本不支持.

image.png


此處沒有預(yù)覽布局成功配圖,因為我的就是Android Studio 3.0 ..........

結(jié)尾

最近看了沈騰的羞羞的鐵拳,被一首老歌洗腦了........

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辜羊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖畏腕,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件右蹦,死亡現(xiàn)場離奇詭異,居然都是意外死亡船侧,警方通過查閱死者的電腦和手機换况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門职辨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人戈二,你說我怎么就攤上這事舒裤。” “怎么了觉吭?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵腾供,是天一觀的道長。 經(jīng)常有香客問我鲜滩,道長伴鳖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任绒北,我火速辦了婚禮黎侈,結(jié)果婚禮上察署,老公的妹妹穿的比我還像新娘闷游。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布脐往。 她就那樣靜靜地躺著休吠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪业簿。 梳的紋絲不亂的頭發(fā)上瘤礁,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音梅尤,去河邊找鬼柜思。 笑死,一個胖子當著我的面吹牛巷燥,可吹牛的內(nèi)容都是我干的赡盘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼缰揪,長吁一口氣:“原來是場噩夢啊……” “哼陨享!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钝腺,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤抛姑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后艳狐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體定硝,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年毫目,在試婚紗的時候發(fā)現(xiàn)自己被綠了喷斋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒜茴,死狀恐怖星爪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粉私,我是刑警寧澤顽腾,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站诺核,受9級特大地震影響抄肖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窖杀,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一漓摩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧入客,春花似錦管毙、人聲如沸腿椎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啃炸。三九已至,卻和暖如春卓舵,著一層夾襖步出監(jiān)牢的瞬間南用,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工掏湾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裹虫,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓融击,卻偏偏與公主長得像恒界,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砚嘴,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容