绝了,今天在使用【ToggleButton】控件的,时候,第一次点击一直没有效果,搞得我还以为出bug了,哎。。。记录一下,省得下次再出这种事情,太搞心态了。顺便记录一下使用方法
首先选择两张图片
设置选择项
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<item android:drawable="@drawable/baseline_visibility_off_black_24dp" android:state_checked="false" />
<item android:drawable="@drawable/baseline_visibility_black_24dp" android:state_checked="true" />
</selector>
页面布局
<ToggleButton
android:id="@+id/toggle_last_pwd"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginEnd="10dp"
android:background="@drawable/toggle_show_select"
android:checked="false"
android:textOff=""
android:textOn="" />
项目代码
首先是错误代码,第一次点击按钮时无效
//密码显示与隐藏
//第一次点击时执行setOnClickListener
toggle_last_pwd.setOnClickListener {
etShow(et_loginPwd, toggle_last_pwd)
}
private fun etShow(editText: EditText, toggleButton: ToggleButton) {
Log.e("MAIN_THIS","点击了。。。。。")
//第二次点击时才执行这段setOnCheckedChangeListener
toggleButton.setOnCheckedChangeListener { com, b ->
//com和b这两个的状态是一致的,只需要使用一个进行判断就可以了
Log.e("MAIN_THIS", " com is ${com.isChecked} , and b is $b")
if (b) editText.transformationMethod =
HideReturnsTransformationMethod.getInstance()
else editText.transformationMethod = PasswordTransformationMethod.getInstance()
editText.setSelection(editText.text.toString().length)
}
}
所以使用这个时,根本不应该使用【setOnClickListener】,应该直接使用【setOnCheckedChangeListener 】 ,所以正常代码就是
//密码显示与隐藏
toggle_last_pwd.setOnCheckedChangeListener { _, b ->
et_loginPwd.apply {
transformationMethod = if (b) HideReturnsTransformationMethod.getInstance()
else PasswordTransformationMethod.getInstance()
setSelection(this.text.toString().length)
}
}