Kotlin與Databinding(一)

簡(jiǎn)介

使用ObservableField<T>來初始化變量呀狼,例如:var userPhone=ObservableField<String>()

封裝

這時(shí)候我們需要對(duì)model類進(jìn)行一層封裝才能達(dá)到我們的要求,好了寨腔,上圖再解釋辛友。

1.png

解釋

因?yàn)槭褂胐atabinding是雙向綁定薄扁,所以咱們這里就比較方便的來直接判斷變量中的值即可。因?yàn)檫@里是我自己寫的Demo废累,所以邏輯判斷是比較簡(jiǎn)單的邓梅,大家如果使用按照自己的需求網(wǎng)上添加即可。

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="手機(jī)號(hào)"
            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="請(qǐng)輸入您的手機(jī)號(hào)碼">

            <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="請(qǐng)輸入您的密碼">

            <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="驗(yàn)證碼"
            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="請(qǐng)輸入您的驗(yàn)證碼">

            <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="注冊(cè)"
        android:textColor="@android:color/white"
        android:textSize="@dimen/font_title"
        bind:onClickListener="@{activity}"
        />
</LinearLayout>

xml的布局是這樣的邑滨,好了日缨,咱們看看怎么賦值吧。

具體調(diào)用

registBind.activity = this //給button注冊(cè)監(jiān)聽
registBind.registerModel = registModel //給xml賦值model類
registModel.btnIsEnable(registModel) //監(jiān)聽EditText的值是否合法

//初始化model類掖看,用回調(diào)的值更新button的isEnabled屬性
var registModel = RegisterModel { isBtnEnable -> isBtnEnable(isBtnEnable) }
//更新button狀態(tài)
fun isBtnEnable(isBtnEnable: Boolean) {
    registBind.registerBtn.isEnabled = isBtnEnable
 }

好了匣距,到這里databinding監(jiān)聽EditText的用法就講完了。有什么疑問可以留言哎壳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墨礁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耳峦,更是在濱河造成了極大的恐慌恩静,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹲坷,死亡現(xiàn)場(chǎng)離奇詭異驶乾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)循签,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門级乐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人县匠,你說我怎么就攤上這事风科∪雎郑” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵贼穆,是天一觀的道長(zhǎng)题山。 經(jīng)常有香客問我,道長(zhǎng)故痊,這世上最難降的妖魔是什么顶瞳? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮愕秫,結(jié)果婚禮上慨菱,老公的妹妹穿的比我還像新娘。我一直安慰自己戴甩,他們只是感情好符喝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甜孤,像睡著了一般洲劣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上课蔬,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音郊尝,去河邊找鬼二跋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛流昏,可吹牛的內(nèi)容都是我干的扎即。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼况凉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谚鄙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刁绒,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤闷营,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后知市,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傻盟,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嫂丙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娘赴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跟啤,死狀恐怖诽表,靈堂內(nèi)的尸體忽然破棺而出唉锌,到底是詐尸還是另有隱情,我是刑警寧澤竿奏,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布袄简,位于F島的核電站,受9級(jí)特大地震影響议双,放射性物質(zhì)發(fā)生泄漏痘番。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一平痰、第九天 我趴在偏房一處隱蔽的房頂上張望汞舱。 院中可真熱鬧,春花似錦宗雇、人聲如沸昂芜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泌神。三九已至,卻和暖如春舞虱,著一層夾襖步出監(jiān)牢的瞬間欢际,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工矾兜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留损趋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓椅寺,卻偏偏與公主長(zhǎng)得像浑槽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子返帕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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