Anko 练手 demo,顺便优化之前的代码布局

前言

先是 Kotlin,再是 Anko,如果说接触 Kotlin 不单单是为了学习一门新的语言,并且 Google 也将 Kotlin 扶上了正妻的位置,学习 Kotlin 就是大势所趋,至少你要能看得懂,毕竟就像 AS 替代 Eclipse 一样,现在的第三方库基本都是 AS 的版本,可以想见不用多久,第三方库都会变成 Kotlin + Anko

尽管现阶段我对于 Anko 的使用少的可怜,更不用说理解了,不过单单优化布局这一个特性,我就觉得是很有吸引力的,并不是为了迎合 Anko 才这么说,我想有些经验的开发者都用过 ViewStub 这个类,这个类主要解决的问题就是:太过复杂的 xml 解析的时候会有延迟,导致 Activity 的 onCreate 很慢。而 Anko 的 DSL 其实本质上就是在用代码来写布局,毫无疑问,这直接就节省了解析 xml 并将其转化为代码的时间了,到了现在 Android O 都已经出来了,对于 App 的每一点优化,都是难能可贵的。

DEMO

Anko 练手 demo,顺便优化之前的代码布局_第1张图片

题外话(坑):Anko 我遇到的坑 (应该会持续更新,PS:给自己定个小目标,然后坐等打脸)

原 xml ,省略了大量的TextView的篇幅


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#F8F8F8"
              android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/header_bar_height">

        <include
            android:id="@+id/simple_action_bar_back"
            layout="@layout/component_back_btn"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:maxWidth="300dp"
            android:singleLine="true"
            android:text="用户协议与隐私条款"
            android:textColor="#333333"
            android:textSize="@dimen/font_size_lg"/>
    RelativeLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            ......
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="10dp"
                android:text="感谢您使用我们的产品和服务。"
                android:textColor="#333333"
                android:textSize="13sp"/>
            ......

        LinearLayout>

    ScrollView>

LinearLayout>

Anko 布局

class KtUserContractActivityUi : AnkoComponent {

    companion object {
        val text1 = "感谢"
        .....
        val text48 = "保留一切解释和修改权利。"
    }

    private val customStyle = { v: Any ->
        when (v) {
            is TextView -> {
                v.textSize = 14f
                v.textColor = R.color.black
            }
        }
    }

    override fun createView(ui: AnkoContext) = with(ui) {
        verticalLayout {
            backgroundColor = Color.parseColor("#FFFFFF")
            relativeLayout {
                include(R.layout.component_back_btn)
                textView("用户协议与隐私条款") {
                    maxWidth = dip(300)
                    singleLine = true
                    textColor = Color.parseColor("#333333")
                    textSize = 20f
                }.lparams(width = wrapContent, height = wrapContent) {
                    centerInParent()
                }
                include(R.layout.component_color_line)
            }.lparams(width = matchParent, height = dip(45))
            scrollView {
                verticalLayout {
                    textView(text1)
                    textView(text2).lparams {
                        topMargin = dip(25)
                    }
                    ......
                    textView(text48).lparams {
                        topMargin = dip(25)
                    }
                }.lparams(width = matchParent, height = matchParent) {
                    topPadding = dip(10)
                    horizontalMargin = dip(10)
                    bottomPadding = dip(10)
                }
            }.lparams(width = matchParent, height = matchParent){
            }.applyRecursively(customStyle)
        }
    }
}

Activity 代码

/**
 * Created by *** on 2017/5/27.
 */
class KtUserContractActivity : KtTitleBaseActivity() {

    override fun ui() {
        KtUserContractActivityUi().setContentView(this);
    }

    companion object Launch {
        fun launch(context: Activity) = context.startActivity(Intent(context, KtUserContractActivity::class.java))
    }

}

代码优化 html

摒弃之前使用几十个TextView 构成的xml 或者 Anko,打算写一个 html ,使用一个 TextView 来搞定这个页面。

你可能感兴趣的:(开发日常)