Kotlin与Databinding(一)

简介

使用ObservableField<T>来初始化变量,例如:var userPhone=ObservableField<String>()

封装

这时候我们需要对model类进行一层封装才能达到我们的要求,好了,上图再解释。

1.png

解释

因为使用databinding是双向绑定,所以咱们这里就比较方便的来直接判断变量中的值即可。因为这里是我自己写的Demo,所以逻辑判断是比较简单的,大家如果使用按照自己的需求网上添加即可。

xml代码

<data class="RegisterBind">

    <variable
        name="activity"
        type="com.kotlin.databinding.zhihu.activity.user.RegisterActivity"/>

    <variable
        name="registerModel"
        type="com.kotlin.databinding.zhihu.model.RegisterModel"/>
</data>


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

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@android:color/white"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:paddingLeft="0dp"
        android:paddingRight="@dimen/margin_block">

        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginEnd="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginStart="5dp"
            android:contentDescription="手机号"
            android:scaleType="centerInside"
            android:src="@drawable/account_phone"/>

        <View
            android:layout_width="1dp"
            android:layout_height="18dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginLeft="34dp"
            android:layout_marginStart="34dp"
            android:background="@color/divider"/>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginLeft="48dp"
            android:layout_marginStart="48dp"
            android:hint="请输入您的手机号码">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/user_mobile"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/transparent"
                android:gravity="center_vertical"
                android:imeOptions="actionNext"
                android:inputType="phone"
                android:maxLength="11"
                android:singleLine="true"
                android:text="@={registerModel.userPhone}"
                android:textColor="@color/font_title"
                android:textSize="@dimen/font_normal"/>
        </android.support.design.widget.TextInputLayout>

        <com.kotlin.databinding.zhihu.widget.CountButton
            android:id="@+id/countButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:minHeight="24dp"
            android:background="@null"
            android:layout_gravity="end|center_vertical"
            android:gravity="center_vertical"
            android:text="@{@string/timer_start}"
            android:textColor="@color/color_primary_dark"
            android:textSize="12sp"
            bind:setDefaultTime="@{@integer/integer_count_time}"
            bind:setFinishText="@{@string/timer_finish}"/>


    </FrameLayout>

    <View
        android:layout_width="34dp"
        android:layout_height="1dp"
        android:background="@android:color/white"/>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@android:color/white"
        android:paddingLeft="0dp"
        android:paddingRight="@dimen/margin_block">

        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginEnd="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginStart="5dp"
            android:contentDescription="密码"
            android:scaleType="centerInside"
            android:src="@drawable/account_password"/>

        <View
            android:layout_width="1dp"
            android:layout_height="20dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginLeft="34dp"
            android:layout_marginStart="34dp"
            android:background="@color/divider"/>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginLeft="48dp"
            android:layout_marginStart="48dp"
            android:gravity="center_vertical"
            android:hint="请输入您的密码">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/user_password"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/transparent"
                android:gravity="center_vertical"
                android:inputType="textPassword"
                android:singleLine="true"
                android:text="@={registerModel.userPwd}"
                android:textColor="@color/font_title"
                android:minLines="6"
                android:maxLength="20"
                android:textSize="@dimen/font_normal"/>
        </android.support.design.widget.TextInputLayout>

        <CheckBox
            android:id="@+id/check_visible"
            style="@style/PasswordCheckboxTheme"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|center_vertical"
            android:gravity="center"
            android:minHeight="24dp"/>

    </FrameLayout>

    <View
        android:layout_width="34dp"
        android:layout_height="1dp"
        android:background="@android:color/white"/>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@android:color/white"
        android:paddingLeft="0dp"
        android:paddingRight="@dimen/margin_block">

        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginEnd="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginStart="5dp"
            android:contentDescription="验证码"
            android:src="@drawable/ic_identify"/>

        <View
            android:layout_width="1dp"
            android:layout_height="20dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginLeft="34dp"
            android:layout_marginStart="34dp"
            android:background="@color/divider"/>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:layout_gravity="center_vertical|start"
            android:layout_marginLeft="48dp"
            android:layout_marginStart="48dp"
            android:gravity="center_vertical"
            android:hint="请输入您的验证码">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/phone_identify_code"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/transparent"
                android:gravity="center_vertical"
                android:inputType="number"
                android:singleLine="true"
                android:text="@={registerModel.idenfityCode}"
                android:textColor="@color/font_title"
                android:textSize="@dimen/font_normal"/>
        </android.support.design.widget.TextInputLayout>

        <com.kotlin.databinding.zhihu.widget.CheckView
            android:id="@+id/change_identify_code"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:minHeight="24dp"
            android:layout_gravity="end|center_vertical"
            checkview:bg_color="@color/color_primary_light"
            checkview:line_num="10"
            checkview:point_num="100"
            checkview:text_color="#FF00FFFF"
            checkview:text_length="4"
            checkview:text_size="30dp"/>

    </FrameLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:background="@color/cut_line_color" />

    <Button
        android:id="@+id/register_btn"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_margin="15dp"
        android:background="@drawable/bg_btn_main"
        android:enabled="false"
        android:text="注册"
        android:textColor="@android:color/white"
        android:textSize="@dimen/font_title"
        bind:onClickListener="@{activity}"
        />
</LinearLayout>

xml的布局是这样的,好了,咱们看看怎么赋值吧。

具体调用

registBind.activity = this //给button注册监听
registBind.registerModel = registModel //给xml赋值model类
registModel.btnIsEnable(registModel) //监听EditText的值是否合法

//初始化model类,用回调的值更新button的isEnabled属性
var registModel = RegisterModel { isBtnEnable -> isBtnEnable(isBtnEnable) }
//更新button状态
fun isBtnEnable(isBtnEnable: Boolean) {
    registBind.registerBtn.isEnabled = isBtnEnable
 }

好了,到这里databinding监听EditText的用法就讲完了。有什么疑问可以留言。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,401评论 25 707
  • DataBinding 库是 Google 公司 Android Framework UI 工具团队开发出来的一款...
    bravian阅读 5,404评论 2 16
  • [TOC] 前言 ...想了半分钟,好像并没有啥需要特别声明的,能翻到这篇文章的人,相信也早已了解了DataBin...
    风少侠阅读 7,896评论 1 30
  • 那是你的一颗牙 在你食指大动的时候暗暗滋生二心 不期时给你致命一击 没有什么不能背弃你 即便那是你的一颗牙 ​​​...
    zxyCCrystal阅读 227评论 0 0
  • 残荷中的禅意
    吼叫的胖阅读 294评论 2 1