Kotlin for android學(xué)習(xí)十一(布局篇):anko-commons

前言

kotlin官網(wǎng)kotlin教程學(xué)習(xí)教程的筆記。
這一節(jié)砾肺,我們引入一個(gè)新庫Anko,Anko庫可以簡(jiǎn)化代碼防嗡,加快開發(fā)速度变汪,是一個(gè)很強(qiáng)大的Kotlin庫。這里我們只需要用anko-commons就行蚁趁,不需要用全庫裙盾。

一、引用anko-commons庫

1.在build.gradle中添加依賴

dependencies {
...
    compile "org.jetbrains.anko:anko-commons:$anko_version"
}

2.在project下的build.gradle中添加版本號(hào)

buildscript {
   ...
    ext.anko_version='0.10.2'
}

二他嫡、感受下Anko與kotlin的簡(jiǎn)化

1. toast

        toast("hello kotlin")
        longToast("long - hello kotlin")

結(jié)合Anko的toast源碼,可以看出番官,這里使用了擴(kuò)展函數(shù)。

fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

2. alert
(1) 正常alert

alert("標(biāo)題", "內(nèi)容") {
            yesButton { toast("O(∩_∩)O好的") }
            noButton { toast("╮(╯﹏╰)╭不好") }
 }.show()
//也可以這樣
 alert {
     message = "內(nèi)容"
     title = "標(biāo)題"
     positiveButton("確定") { toast("已確定") }
     negativeButton("取消") { toast("已取消") }
 }.show()

(2) selector alert

    val fruits = listOf("apple", "orange", "banana")
        selector("what do you like ?", fruits) { dialogInterface, i ->
            toast("so you like ${fruits[i]} ")
}

(3) 自定義alert

        alert {
            customView {
                val  view = View.inflate(this@MainActivity,R.layout.activity_other,null)
                addView(view,ViewGroup.LayoutParams(100,100))
            }
        }.show()
//如果我們支持了 Anko layouts庫涮瞻,也可以這樣
alert {
    customView {
        editText()
    }
}.show()

3. progress dialog

        indeterminateProgressDialog("加載中").show()

4. findViewById

        val recyclerView:RecyclerView = find(R.id.recyclerview)

5. intent
(1) 使用intent
使用Anko之前

        val intent = Intent(this, OtherActivity::class.java)
        intent.putExtra("id", 5)
        intent.putExtra("name", "me")
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
        startActivity(intent)

使用Anko之后

        startActivity(intentFor<OtherActivity>("id" to 5,"name" to "me").singleTop())

當(dāng)然鲤拿,如果不需要啟動(dòng)模式就更簡(jiǎn)單了

  startActivity<OtherActivity>("id" to 5,"name" to "me")
行為 方式
打電話 makeCall(number: String): Boolean
發(fā)短信 sendSMS(number: String, text: String = ""): Boolean
調(diào)用瀏覽器 browse(url: String, newTask: Boolean = false): Boolean
分享文字 share(text: String, subject: String = ""): Boolean
發(fā)郵件 email(email: String, subject: String = "", text: String = ""): Boolean

(2) 常用的intent

行為 方式
打電話 makeCall(number: String): Boolean
發(fā)短信 sendSMS(number: String, text: String = ""): Boolean
調(diào)用瀏覽器 browse(url: String, newTask: Boolean = false): Boolean
分享文字 share(text: String, subject: String = ""): Boolean
發(fā)郵件 email(email: String, subject: String = "", text: String = ""): Boolean

6. log
(1) 不想輸入tag的時(shí)候,我們可以這樣,默認(rèn)tag為類名

class MainActivity : Activity() , AnkoLogger {
    fun method(){
        debug(123)
        debug { "debug{}" }
        warn(null)
        info("information")
    }
}

當(dāng)然也可以自定義tag內(nèi)容署咽,只要重寫loggerTag方法即可。

  override val loggerTag: String
        get() = "myTag"

也許有人發(fā)現(xiàn)debug打印不出來生音,因?yàn)?/p>

Note that the log message will not be written if the current log level is above [Log.DEBUG].The default log level is [Log.INFO].

也就是說默認(rèn)的等級(jí)是Log.INFO宁否,而我們只能打印不低于默認(rèn)等級(jí)的log信息,也就是當(dāng)Log.isLoggable(tag, Log.INFO)為true的時(shí)候才可以打印缀遍。
至于如何更改默認(rèn)等級(jí)慕匠,官網(wǎng)沒寫,也沒有查出來域醇,如果你知道台谊,請(qǐng)給我說一下蓉媳,謝謝O(∩_∩)O~。
(2) 也可以作為一個(gè)對(duì)象使用

    private val LOG = AnkoLogger("myTag")
    private var ankoLogger = AnkoLogger(this.javaClass)
    fun method(){
        ankoLogger.warn { "warn use default tag" }
        LOG.warn { "warn use myTag" }
    }

7. color 透明度改變锅铅,增加可讀性

        t1.setBackgroundColor(0x99.gray.opaque)//無透明度
        t2.setBackgroundColor(0xff0000.opaque.opaque) //無透明度
        t3.setBackgroundColor(0x99.gray.withAlpha(155))  //設(shè)置透明度

8. dimensions 支持各種px dp sp等的轉(zhuǎn)換酪呻,再也不用自己寫了,贊一個(gè)

        var px=dip(1)
        var dp = px2dip(px)

9. 更改子view

//更改alert布局中的textview的textSize
  alert {
            customView {
                val  view = View.inflate(this@MainActivity,R.layout.activity_other,null)
                view.applyRecursively {
                    view -> when(view){
                    is TextView -> view.textSize=20f
                }
                }
                addView(view,ViewGroup.LayoutParams(100,100))
            }
        }.show()

三盐须、異步請(qǐng)求數(shù)據(jù)

請(qǐng)求數(shù)據(jù)之前玩荠,莫要忘記權(quán)限哦!T舻恕阶冈!

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val url = "https://facebook.github.io/react-native/movies.json"
        doAsync {
            val data = getData(url)
            uiThread {
                showData(data)
            }
        }
    }

    fun showData(data: String) {
        find<TextView>(R.id.t1).text = data
    }

    fun getData(url: String): String {
        return URL(url).readText()
    }
}

這樣子,數(shù)據(jù)便請(qǐng)求下來了塑径。
uiThread可以依賴調(diào)用者女坑,例如這里被Activity調(diào)用的,如果activity被銷毀了统舀,那么uiThread就不會(huì)執(zhí)行匆骗,這樣就不會(huì)出現(xiàn)Activity銷毀的時(shí)候遇到崩潰的情況了。
如果我們想要返回結(jié)果绑咱,可以這樣子

  val doAsyncResult = doAsyncResult{
            getData(url)
 }
showData(doAsyncResult.get().toString())

后記

在doAsync源碼中绰筛,

    val context = AnkoAsyncContext(WeakReference(this))

可以看到這里使用了弱引用,使用強(qiáng)引用可能會(huì)引發(fā)內(nèi)存泄漏的問題描融。強(qiáng)引用铝噩、弱引用、軟引用窿克、虛引用的區(qū)別與介紹點(diǎn)擊鏈接:
強(qiáng)引用骏庸、弱引用、軟引用年叮、虛引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末具被,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子只损,更是在濱河造成了極大的恐慌一姿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跃惫,死亡現(xiàn)場(chǎng)離奇詭異叮叹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)爆存,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蛉顽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人先较,你說我怎么就攤上這事携冤〉苛福” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵曾棕,是天一觀的道長(zhǎng)扣猫。 經(jīng)常有香客問我,道長(zhǎng)睁蕾,這世上最難降的妖魔是什么苞笨? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮子眶,結(jié)果婚禮上瀑凝,老公的妹妹穿的比我還像新娘。我一直安慰自己臭杰,他們只是感情好粤咪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渴杆,像睡著了一般寥枝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上磁奖,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天囊拜,我揣著相機(jī)與錄音,去河邊找鬼比搭。 笑死冠跷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的身诺。 我是一名探鬼主播蜜托,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼霉赡!你這毒婦竟也來了橄务?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤穴亏,失蹤者是張志新(化名)和其女友劉穎蜂挪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗓化,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锅劝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟆湖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玻粪,死狀恐怖隅津,靈堂內(nèi)的尸體忽然破棺而出诬垂,到底是詐尸還是另有隱情,我是刑警寧澤伦仍,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布结窘,位于F島的核電站,受9級(jí)特大地震影響充蓝,放射性物質(zhì)發(fā)生泄漏隧枫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一谓苟、第九天 我趴在偏房一處隱蔽的房頂上張望官脓。 院中可真熱鬧,春花似錦涝焙、人聲如沸卑笨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赤兴。三九已至,卻和暖如春隧哮,著一層夾襖步出監(jiān)牢的瞬間桶良,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工沮翔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陨帆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓鉴竭,卻偏偏與公主長(zhǎng)得像歧譬,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搏存,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評(píng)論 25 707
  • Google在今年的IO大會(huì)上宣布瑰步,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 76,876評(píng)論 31 489
  • Kotlin我們也學(xué)了一些基礎(chǔ)璧眠,但怎么用我們還是不知道缩焦?今天我們從基礎(chǔ)轉(zhuǎn)向?qū)崙?zhàn),在Android平臺(tái)上開發(fā)Kotl...
    Lypop閱讀 10,901評(píng)論 2 6
  • 5. 最佳實(shí)踐 好了終于要點(diǎn)講自己的東西了责静,有點(diǎn)小激動(dòng)袁滥。下面這些僅表示個(gè)人觀點(diǎn),非一定之規(guī)灾螃,各位看官按需取用题翻,有說...
    SnowDragonYY閱讀 2,394評(píng)論 4 36
  • fiddler札記 fiddler的簡(jiǎn)單配置 fiddler的界面簡(jiǎn)介 fiddler的狀態(tài)圖標(biāo)
    小矮人Ethan閱讀 258評(píng)論 0 0