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的用法就讲完了。有什么疑问可以留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏漫漫前端路

在 Vue 中使用 TypeScript 的一些思考(实践)

两种形式输出结果一致,同是创建一个 Vue 子类,但在书写组件选项如 props,mixin 时,有些不同。特别是当你使用 Vue.extend() 时,为了让...

882
来自专栏区块链

Web安全测试基础-2

文 | 李文祥 一、Web安全漏洞概念及原理分析 1.2 跨站脚本攻击(XSS) 概念:通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏...

1869
来自专栏Ken的杂谈

屏蔽浏览器对网页JS脚本错误提示

网页脚本基本已经成了现在网站开发中不可或缺的元素,无论是使用JS:Javascript还是使用其他JS库:

861
来自专栏你不就像风一样

SpringBoot集成Freemarker与Thymeleaf

3.模板使用 在templates文件夹下新建freemarker文件夹,然后在该文件夹下新建index.html

843
来自专栏技术小讲堂

探寻ASP.NET MVC鲜为人知的奥秘(3):寻找多语言的最佳实践方式

如果你的网站需要被世界各地的人访问,访问者会使用各种不同的语言和文字书写习惯,那么创建一个支持多语言的网站就是十分必要的了,这一篇文章就讲述怎么快速合理的创建网...

2688
来自专栏君赏技术博客

Jekyll-Admin-Mac-列表

接下来我们需要就是做出这个列表数据,我们可以使用 NSTableView来做出这个效果。

1141
来自专栏Albert陈凯

2018-09-28 Ok2Curl, 将OkHttp请求转换为curl日志

源代码名称:Ok2Curl* 源代码网址:http://www.github.com/mrmike/Ok2Curl* Ok2Curl源代码文档 Ok2Cu...

1065
来自专栏编程

autoload自动加载机制使用

在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来,但是这样可能会使得在...

18910
来自专栏社区的朋友们

爬虫实战 : 爬虫之 web 自动化终极杀手(下)

最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路。本次爬虫内容有:静态页面的爬取。动态页面的爬取。web 自动化终极爬虫...

1.2K1
来自专栏前端小作坊

原型链上的DOM Attributes

Chrome开发小组最近发表声明他们正在將DOM properties移动到原型链中。这个更新将会在Chrome 43(2015年4月发布beta版本)中实现。...

963

扫码关注云+社区