实习笔记之个人设置界面

来源:互联网 发布:ucpaas java短信发送 编辑:程序博客网 时间:2024/06/06 03:52

这是实习第一周的几天所做的事情,主要内容包括:

  1. 切图
  2. 几种基本控件的使用
  3. 主要实现功能:修改密码,个人资料(头像选择,修改昵称,性别选择),关于我们

声明:所有代码基于kotlin和databinding。

首先是设置界面的跳转:

override fun onCreateOptionsMenu(menu: Menu): Boolean {        menuInflater.inflate(R.menu.menu_main, menu)        return true    }    override fun onOptionsItemSelected(item: MenuItem): Boolean {        if (item.itemId == R.id.menu_setting) {            SettingActivity.startActivity(this@EtripMainActivity)            return true        } else {            return super.onOptionsItemSelected(item)        }    }

重写上述两个方法,在主页面中增加菜单栏并设置跳转图标和逻辑,跳转到SettingActivity中。
SettingActivity 的界面如下:
设置界面

代码如下:

package com.radella.etrip.ui.settingimport android.content.Contextimport android.content.Intentimport android.databinding.DataBindingUtilimport android.view.Viewimport android.widget.Buttonimport android.widget.LinearLayoutimport android.widget.TextViewimport com.radella.etrip.Rimport com.radella.etrip.base.BaseNormalActivityimport com.radella.etrip.databinding.ActivitySetting1Bindingimport com.radella.etrip.ui.main.EtripMainActivityclass SettingActivity : BaseNormalActivity(),View.OnClickListener {    override fun onClick(v: View?) {//各控件的点击事件,分别进入不同页面中        val text: TextView? = v?.findViewById(R.id.text) as TextView?        when(text?.text)        {            "个人资料" -> {                PersonalDataActivity.startActivity(this@SettingActivity)            }            "修改密码" -> {                ModifyPwdActivity.startActivity(this@SettingActivity)            }            "关于我们" ->            {                AboutUsActivity.startActivity(this@SettingActivity)            }        }    }    lateinit var settingBinding: ActivitySetting1Binding    var strings:Strings?=null    override fun daggerInject() {    }    override fun initialize() {//初始化界面的数据,通过databinding绑定到xml文件,然后注册点击事件        strings=Strings("个人资料","")        settingBinding.personalData=strings        strings=Strings("修改密码","")        settingBinding.changePwd=strings        strings=Strings("关于我们","")        settingBinding.aboutUs=strings        var item1:LinearLayout?= findViewById(R.id.item1) as LinearLayout?        item1?.setOnClickListener(this@SettingActivity)        var item2:LinearLayout?= findViewById(R.id.item2) as LinearLayout?        item2?.setOnClickListener(this@SettingActivity)        var item3:LinearLayout?= findViewById(R.id.item3) as LinearLayout?        item3?.setOnClickListener(this@SettingActivity)        var returnEtripMain:Button= findViewById(R.id.setting_return_EtripMain) as Button        returnEtripMain.setOnClickListener(View.OnClickListener {            EtripMainActivity.startActivity(this@SettingActivity)            finish() })    }    override fun loadViewLayout() {//databinding绑定到xml中        settingBinding = DataBindingUtil.inflate(layoutInflater, R.layout.activity_setting1,binding.llContainer,true)    }    companion object{//在其他activity中调用该方法启动本activity        fun startActivity(context: Context){            val intent = Intent()            intent.setClass(context,SettingActivity::class.java)            context.startActivity(intent)        }    }}

以及SettingActivity 的xml布局R.layout.activity_setting1

<?xml version="1.0" encoding="utf-8"?><layout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:bind="http://schemas.android.com/tools">    <data>        <variable            name="personal_data"            type="com.radella.etrip.ui.setting.Strings"/>        <variable            name="change_pwd"            type="com.radella.etrip.ui.setting.Strings"/>        <variable            name="about_us"            type="com.radella.etrip.ui.setting.Strings"/>    </data>    <LinearLayout        android:orientation="vertical" android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@color/white"        >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="vertical"            android:layout_marginStart="20dp">            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="设置"                android:layout_marginTop="102dp"                android:textSize="26sp"                />            <LinearLayout                android:layout_width="match_parent"                android:layout_height="1dp"                android:layout_marginTop="20dp"                android:background="@color/black_alpha_10" />            <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:orientation="vertical"                android:id="@+id/item1">                <include                    layout="@layout/line_with_text"                    bind:viewModel="@{personal_data}" />            </LinearLayout>            <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:orientation="vertical"                android:id="@+id/item2">                <include                    layout="@layout/line_with_text"                    bind:viewModel="@{change_pwd}" />            </LinearLayout>            <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:orientation="vertical"                android:id="@+id/item3">                <include                    layout="@layout/line_with_text"                    bind:viewModel="@{about_us}" />            </LinearLayout>        </LinearLayout>        <Button            android:id="@+id/setting_return_EtripMain"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginStart="40dp"            android:layout_marginEnd="40dp"            android:layout_marginTop="16dp"            android:text="退出登录"            android:textSize="16sp"            android:textColor="@color/white"            android:layout_gravity="center_vertical"            android:backgroundTint="@color/colorPrimary"/>    </LinearLayout></layout>

这里有几点要注意:

  1. databinding与include标签的结合,可以将当前xml布局的数据传输到include的布局中
  2. 设置Button的背景backgroundTint ,效果好于background ,有圆角

PersonalDataActivity 个人资料界面
这里写图片描述

代码部分:

package com.radella.etrip.ui.settingimport android.Manifestimport android.app.Dialogimport android.content.Contextimport android.content.DialogInterfaceimport android.content.Intentimport android.content.pm.PackageManagerimport android.databinding.DataBindingUtilimport android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.os.Bundleimport android.os.Environmentimport android.support.v4.app.ActivityCompatimport android.support.v4.content.ContextCompatimport android.support.v7.app.AlertDialogimport android.util.Logimport android.view.Gravityimport android.view.KeyEventimport android.view.Viewimport android.widget.ImageViewimport android.widget.LinearLayoutimport android.widget.PopupWindowimport android.widget.TextViewimport com.radella.etrip.Rimport com.radella.etrip.base.BaseNormalActivityimport com.radella.etrip.databinding.ActivityPersonalDataBindingimport com.sw926.imagefileselector.ErrorResultimport com.sw926.imagefileselector.ImageFileSelectorclass PersonalDataActivity : BaseNormalActivity(),View.OnClickListener {    lateinit var personalDataBinding: ActivityPersonalDataBinding    lateinit var imageSelector: ImageFileSelector    var popupWindow:PopupWindow?=null    override fun onClick(v: View?) {        if (v?.id==R.id.head_icon)//点击头像,弹出popwindow        {            val current_view=layoutInflater.inflate(R.layout.activity_personal_data,null)            val view = layoutInflater.inflate(R.layout.head_icon_choose, null)            val windowManager = windowManager            val width = windowManager.defaultDisplay.width            val heigth = windowManager.defaultDisplay.height            Log.i("width", width.toString() + "")            Log.i("height", heigth.toString() + "")            popupWindow = PopupWindow(view, width.toInt(), heigth.toInt())            popupWindow?.animationStyle=R.style.anim_menu_bottom_bar//设置弹出动画            popupWindow?.isFocusable = true            popupWindow?.isTouchable=true            popupWindow?.isOutsideTouchable = true            view.isFocusable=true            view.isFocusableInTouchMode=true            view.setOnKeyListener(object :View.OnKeyListener{//设置点击返回键的事件,令popwindow消失                override fun onKey(v: View?, keyCode: Int, event: KeyEvent?): Boolean {                    if (keyCode==KeyEvent.KEYCODE_BACK)                    {                        if (popupWindow?.isShowing!!)                        {                            popupWindow?.dismiss()                        }                    }                    return false                }            }            )//            popupWindow?.setBackgroundDrawable(PaintDrawable())            //显示在屏幕中央            popupWindow?.showAtLocation(current_view, Gravity.CENTER, 0, 40)            val close_icon:ImageView= view.findViewById(R.id.close_icon) as ImageView            close_icon.setOnClickListener(View.OnClickListener {popupWindow?.dismiss()})            val take_picture:ImageView= view.findViewById(R.id.take_picture) as ImageView            take_picture.setOnClickListener(View.OnClickListener {                popupWindow?.dismiss()                imageSelector.takePhoto(this@PersonalDataActivity,2) })            val photo_album:ImageView= view.findViewById(R.id.photo_album) as ImageView            photo_album.setOnClickListener(View.OnClickListener {                popupWindow?.dismiss()                imageSelector.selectImage(this@PersonalDataActivity,3) })            return        }        val text: TextView? = v?.findViewById(R.id.text) as TextView?        when(text?.text)        {            "昵称" ->            {                var intent:Intent=Intent(this@PersonalDataActivity,ModifyNicknameActivity::class.java)                intent.putExtra("nickname",personalDataBinding.text2.data)                startActivityForResult(intent,10)            }            "性别" ->{                val choiceonclicklistener=ChoiceOnClickListener()                val sex:String?=personalDataBinding.text3.data                val sexInt=if (sex=="女")1 else 0                val sexDialog:Dialog=AlertDialog.Builder(this@PersonalDataActivity)                        .setTitle("选择性别")                        .setSingleChoiceItems(R.array.sex,sexInt,choiceonclicklistener)                        .setPositiveButton("确定", DialogInterface.OnClickListener { dialog, which ->                                if (choiceonclicklistener.which==0)                                {                                    var strings=Strings("性别","男")                                    personalDataBinding.text3=strings                                }                                else                                {                                    var strings=Strings("性别","女")                                    personalDataBinding.text3=strings                                }                        })                        .create()                sexDialog.show()            }        }    }    override fun loadViewLayout() {        personalDataBinding=DataBindingUtil.inflate(layoutInflater, R.layout.activity_personal_data,binding.llContainer,true)    }    override fun daggerInject() {    }    override fun initialize() {        val str="头像"        personalDataBinding.text1=str        var strings=Strings("昵称","周吉")        personalDataBinding.text2=strings        strings=Strings("性别","女")        personalDataBinding.text3=strings//        strings=Strings("地区","北京")//        personalDataBinding.text4=strings        var item1:ImageView=findViewById(R.id.head_icon) as ImageView        item1.setOnClickListener(this@PersonalDataActivity)        var item2:LinearLayout= findViewById(R.id.personal_data_item2) as LinearLayout        item2.setOnClickListener(this@PersonalDataActivity)        var item3:LinearLayout= findViewById(R.id.personal_data_item3) as LinearLayout        item3.setOnClickListener(this@PersonalDataActivity)        imageSelector = ImageFileSelector(this@PersonalDataActivity)        imageSelector.setOutPutPath(Environment.getExternalStorageDirectory().toString() + "/tencent/QQfile_recv/")        Log.v("FILEPATH1",Environment.getExternalStorageDirectory().toString() + "/tencent/QQfile_recv/")        // 设置输出文件的尺寸        imageSelector.setOutPutImageSize(800, 600)        // 设置保存图片的质量 0100        imageSelector.setQuality(80)        imageSelector.setCallback(object : ImageFileSelector.Callback {            override fun onSuccess(file: String) {                // 选取图片成功                Log.v("FILEPATH2",file)//                val head_icon_layout=layoutInflater.inflate(R.layout.line_with_image,null)                val head_icon_layout: View? =findViewById(R.id.head_icon)                val head_icon_image:ImageView?= head_icon_layout?.findViewById(R.id.head_icon) as ImageView?                if (head_icon_image==null)                {                    Log.v("HEADICON","NULL")                }                else                {                    val image:Bitmap?= BitmapFactory.decodeFile(file)                    head_icon_image?.setImageBitmap(image)                    head_icon_image.scaleType=ImageView.ScaleType.CENTER_CROP                }            }            override fun onError(errorResult: ErrorResult?) {                when(errorResult){                }            }        })        checkPermissionPic()    }    /**     * 检查读取相册的权限     */    fun checkPermissionPic(){        if( ContextCompat.checkSelfPermission(this,                Manifest.permission.READ_EXTERNAL_STORAGE)                == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this,                Manifest.permission.WRITE_EXTERNAL_STORAGE)                == PackageManager.PERMISSION_GRANTED ){        }else {            if (ActivityCompat.shouldShowRequestPermissionRationale(this,                    Manifest.permission.READ_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1);            } else {                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1);            }        }    }    //点击保存退到设置界面    fun clickReturnSetting(view: View){        finish()    }    companion object{        fun startActivity(context: Context){            val intent = Intent()            intent.setClass(context,PersonalDataActivity::class.java)            context.startActivity(intent)        }    }    class ChoiceOnClickListener:DialogInterface.OnClickListener{        var which:Int=0        override fun onClick(dialog: DialogInterface?, which: Int) {            this.which=which        }    }    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {        super.onActivityResult(requestCode, resultCode, data)        if (requestCode==10&&resultCode==10)        {            var bundle:Bundle?=data?.getBundleExtra("nickname")            var strings=Strings("昵称", bundle!!["nickname"] as String?)            personalDataBinding.text2=strings        }        imageSelector.onActivityResult(this@PersonalDataActivity,requestCode,resultCode,data)    }        override fun onSaveInstanceState(outState: Bundle?) {        super.onSaveInstanceState(outState)        imageSelector.onSaveInstanceState(outState)    }    override fun onRestoreInstanceState(savedInstanceState: Bundle?) {        super.onRestoreInstanceState(savedInstanceState)        imageSelector.onRestoreInstanceState(savedInstanceState)    }    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {        if (requestCode == 1){            if (grantResults.size == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {                //授权成功            } else {                //授权失败            }        }        else {            super.onRequestPermissionsResult(requestCode, permissions, grantResults)            imageSelector.onRequestPermissionsResult(this@PersonalDataActivity,requestCode, permissions, grantResults)        }    }}

这个个人资料的界面代码是耗时最多的部分,干了三件事:

  1. 选择头像
  2. 修改昵称
  3. 选择性别

分别细说:
1.选择头像。
核心:popwindow、imageSelector的使用、权限申请和检查,popwindow用于在点击头像时弹出半透明的选择方式界面,注意界面本身和界面外部的属性设置即可。
imageSelector的使用:

imageSelector = ImageFileSelector(this@PersonalDataActivity)     imageSelector.setOutPutPath(Environment.getExternalStorageDirectory().toString() + "/tencent/QQfile_recv/")        // 设置输出文件的尺寸        imageSelector.setOutPutImageSize(800, 600)        // 设置保存图片的质量 0100        imageSelector.setQuality(80)        imageSelector.setCallback(object : ImageFileSelector.Callback {            override fun onSuccess(file: String) {                // 选取图片成功                Log.v("FILEPATH2",file)//                val head_icon_layout=layoutInflater.inflate(R.layout.line_with_image,null)                val head_icon_layout: View? =findViewById(R.id.head_icon)                val head_icon_image:ImageView?= head_icon_layout?.findViewById(R.id.head_icon) as ImageView?                if (head_icon_image==null)                {                    Log.v("HEADICON","NULL")                }                else                {                    val image:Bitmap?= BitmapFactory.decodeFile(file)                    head_icon_image?.setImageBitmap(image)                    head_icon_image.scaleType=ImageView.ScaleType.CENTER_CROP                }            }            override fun onError(errorResult: ErrorResult?) {                when(errorResult){                }            }        })    }

当选取图片成功后会调用onSuccess方法
其次要在onSaveInstanceState、
onRestoreInstanceState、
onRequestPermissionsResult

方法最后分别加上
imageSelector.onSaveInstanceState(outState)、
imageSelector.onRestoreInstanceState(savedInstanceState)、
imageSelector.onRequestPermissionsResult(this@PersonalDataActivity,requestCode, permissions, grantResults)

关于权限方面其实百度就行,代码中也有了
xml文件如下:activity_personal_data

<?xml version="1.0" encoding="utf-8"?><layout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:bind="http://schemas.android.com/tools">    <data>        <variable            name="text1"            type="String"/>        <variable            name="text2"            type="com.radella.etrip.ui.setting.Strings"/>        <variable            name="text3"            type="com.radella.etrip.ui.setting.Strings"/>        <!--<variable-->            <!--name="text4"-->            <!--type="com.radella.etrip.ui.setting.Strings"/>-->    </data>    <LinearLayout        android:orientation="vertical" android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@color/white"        >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="vertical"            android:layout_marginStart="20dp">            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="个人资料"                android:layout_marginTop="102dp"                android:textSize="26sp"                />            <LinearLayout                android:layout_width="match_parent"                android:layout_height="match_parent"                android:orientation="vertical"                android:layout_marginTop="18dp">                <LinearLayout                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:id="@+id/personal_data_item1">                    <include                        layout="@layout/line_with_image"                        bind:text="@{text1}"                        android:id="@+id/head_icon_layout"                        />                </LinearLayout>                <LinearLayout                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:id="@+id/personal_data_item2">                    <include                        layout="@layout/line_with_text"                        bind:viewModel="@{text2}"/>                </LinearLayout>                <LinearLayout                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:id="@+id/personal_data_item3">                    <include                        layout="@layout/line_with_text"                        bind:viewModel="@{text3}"/>                </LinearLayout>                <!--<include-->                    <!--layout="@layout/line_with_text"-->                    <!--bind:viewModel="@{text4}"/>-->            </LinearLayout>        </LinearLayout>        <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginStart="76dp"            android:layout_marginEnd="76dp"            android:layout_marginTop="32dp"            android:text="保存"            android:textColor="@color/white"            android:backgroundTint="@color/colorPrimary"            android:textSize="16sp"            android:layout_gravity="center_vertical"            android:onClick="clickReturnSetting"            />    </LinearLayout></layout>

2.修改昵称ModifyNicknameActivity

这里写图片描述

package com.radella.etrip.ui.settingimport android.content.Contextimport android.content.Intentimport android.databinding.DataBindingUtilimport android.os.Bundleimport android.util.Logimport android.view.Viewimport android.widget.Buttonimport com.radella.etrip.Rimport com.radella.etrip.base.BaseNormalActivityimport com.radella.etrip.dagger.ActivityModuleimport com.radella.etrip.dagger.DaggerAppComponentimport com.radella.etrip.databinding.ActivityModifyNicknameBindingimport com.radella.etrip.viewmodle.setting.ModifyNameViewModelimport javax.inject.Injectclass ModifyNicknameActivity : BaseNormalActivity(),View.OnClickListener {    lateinit var modifyNicknameBinding: ActivityModifyNicknameBinding    @Inject lateinit var viewModel: ModifyNameViewModel    override fun loadViewLayout() {       modifyNicknameBinding=DataBindingUtil.inflate(layoutInflater, R.layout.activity_modify_nickname,binding.llContainer,true)    }    override fun daggerInject() {        DaggerAppComponent                .builder().activityModule(ActivityModule(this@ModifyNicknameActivity))                .build()                .inject(this)    }    override fun initialize() {        modifyNicknameBinding.viewModel = viewModel        oldnickname=intent.getStringExtra("nickname")        modifyNicknameBinding.viewModel.edit_text.set(oldnickname)        //获取原昵称        if (oldnickname?.isNotEmpty()!!)        {            modifyNicknameBinding.viewModel.save_color.set(resources.getColor(R.color.colorPrimary))            modifyNicknameBinding.viewModel.saveEnabled.set(true)            //当编辑框不为空时令保存按钮可点击        }        else        {        //否则不可点击            modifyNicknameBinding.viewModel.save_color.set(resources.getColor(R.color.qupai_gray_0xd4))            modifyNicknameBinding.viewModel.saveEnabled.set(false)        }    }    var oldnickname:String?=null    override fun onClick(v: View?) {        val edit_nickname:String=modifyNicknameBinding.viewModel.edit_text.get()        var bundle:Bundle=Bundle()        bundle.putString("nickname", edit_nickname)        Log.v("edit_nickname",edit_nickname)        intent.putExtra("nickname",bundle)        setResult(10,intent)//        PersonalDataActivity.startActivity(this@ModifyNicknameActivity)        finish()    }    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        var saveButton: Button = findViewById(R.id.modify_nickname_save) as Button        saveButton.setOnClickListener(this@ModifyNicknameActivity)//        oldnickname=intent.getStringExtra("nickname")//        var edit_nickname:MaterialEditText= findViewById(R.id.edit_nickname) as MaterialEditText//        edit_nickname.setText(oldnickname)    }    companion object{        fun startActivity(context: Context){            val intent = Intent()            intent.setClass(context,ModifyNicknameActivity::class.java)            context.startActivity(intent)        }    }}

xml文件:activity_modify_nickname

<layout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <data>        <variable            name="viewModel"            type="com.radella.etrip.viewmodle.setting.ModifyNameViewModel"/>    </data>    <LinearLayout        android:orientation="vertical"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@color/white"        >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical"            android:layout_marginStart="20dp">            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="102dp"                android:text="修改昵称"                android:textSize="26sp"/>            <TextView                style="@style/text_20_black"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="4dp"                android:text="可使用中英文、数字和下划线,字数限制1-10个字"                android:textSize="12sp"/>            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="68dp"                android:text="输入昵称"                android:textSize="12sp"/>            <com.rengwuxian.materialedittext.MaterialEditText                android:id="@+id/edit_nickname"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:textSize="18sp"                android:maxLength="10"                android:text="@{viewModel.edit_text.get()}"                app:onTextChangedCommand="@{viewModel.textChangeCommand}"                />            <Button                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_marginTop="48dp"                android:backgroundTint="@{viewModel.save_color.get()}"                android:text="保存"                android:textSize="16sp"                android:textColor="#fff"                android:layout_marginStart="40dp"                android:layout_marginEnd="40dp"                android:layout_gravity="center_horizontal"                android:enabled="@{viewModel.saveEnabled.get()}"                android:id="@+id/modify_nickname_save"/>        </LinearLayout>    </LinearLayout></layout>

1.<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/edit_nickname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:maxLength="10"
android:text="@{viewModel.edit_text.get()}"
app:onTextChangedCommand="@{viewModel.textChangeCommand}"
/>
设置最长字数用maxlength
2.该页面的viewmodel

package com.radella.etrip.viewmodle.settingimport android.app.Activityimport android.databinding.ObservableBooleanimport android.databinding.ObservableFieldimport android.databinding.ObservableIntimport android.util.Logimport com.kelin.mvvmlight.base.ViewModelimport com.kelin.mvvmlight.bindingadapter.edittext.ViewBindingAdapterimport com.kelin.mvvmlight.command.ReplyCommandimport com.radella.etrip.Rimport rx.functions.Action0import java.util.*import javax.inject.Inject/** * Created by 邓苏桃 on 2017/7/21. */class ModifyNameViewModel @Inject internal constructor():ViewModel{    @Inject lateinit var context: Activity    var saveEnabled= ObservableBoolean()    var edit_text=ObservableField<String>()    var save_color=ObservableInt()    var textChangeCommand=ReplyCommand<ViewBindingAdapter.TextChangeDataWrapper>(){        t ->        Log.v("edit_text1",edit_text.get())        if (t.s.isNotEmpty())        {            saveEnabled.set(true)            save_color.set(context.resources.getColor(R.color.colorPrimary))        }        else        {            saveEnabled.set(false)            save_color.set(context.resources.getColor(R.color.qupai_gray_0xd4))        }        edit_text.set(t.s.toString())        Log.v("edit_text2",edit_text.get())    }}

使用了ReplyCommand,其类型需要查询文档。
set_color应该这样设置:

save_color.set(context.resources.getColor(R.color.colorPrimary))

而不是直接写R.color.colorPrimary

3.选择性别
这里写图片描述
就是一个简单的Dialog创建,实现DialogInterface.OnClickListener 接口以记录点击的位置(which)

其他两个界面比较简单,修改密码调下界面即可,关于我们的图要用ScaleType:centercrop来充满整个页面。