EditText密码切换按钮无法显示明文密码问题求助
我来帮你一步步排查这个问题:
1. 确认EditText的inputType设置正确
TextInputLayout的密码切换功能必须依赖EditText设置了正确的密码类型inputType,如果你的EditText没设置或者设置错误,Toggle按钮点击后不会切换明文/密文。
你需要确保EditText的属性里包含:
android:inputType="textPassword"
如果是网页场景的密码,也可以用textWebPassword,核心是要指定密码类的inputType。
完整的正确布局示例应该是这样的:
<android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingRight="10dp" android:textColorHint="@color/primary_dark" android:id="@+id/edit_inputPassword" app:passwordToggleEnabled="true" app:passwordToggleTint="@color/primary_dark"> <!-- EditText必须是TextInputLayout的直接子View,且配置正确的inputType --> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" android:inputType="textPassword"/> </android.support.design.widget.TextInputLayout>
2. 排查自定义passwordToggleDrawable的问题
你代码里用了app:passwordToggleDrawable="@drawable/ic_remove_red_...",这个自定义drawable大概率是问题所在:
- 可能没有配置状态选择器(比如缺少
state_checked状态的图标),导致点击后没有视觉反馈,甚至影响功能触发; - 资源文件损坏或者路径错误。
建议先暂时注释掉这个属性,用系统默认的Toggle图标测试:
<!-- 先注释掉自定义drawable,用默认图标验证功能 --> <!-- app:passwordToggleDrawable="@drawable/ic_remove_red_..." -->
如果此时Toggle按钮能正常切换明文,那就是你自定义的drawable有问题,需要给它添加状态选择器。比如创建一个password_toggle_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_show_password" android:state_checked="true"/> <item android:drawable="@drawable/ic_hide_password"/> </selector>
然后把app:passwordToggleDrawable指向这个selector文件即可。
3. 确保EditText是TextInputLayout的直接子View
TextInputLayout的密码切换功能要求EditText必须是它的直接子元素,不能把EditText嵌套在LinearLayout等其他布局里,否则TextInputLayout无法正确关联EditText的输入状态。
4. 检查依赖库和编译版本匹配
你使用的是com.android.support:design:27.0.2,请确保项目模块的build.gradle里的compileSdkVersion和targetSdkVersion也是27(和依赖库版本一致),版本不匹配可能导致控件功能异常。
示例配置:
android { compileSdkVersion 27 defaultConfig { targetSdkVersion 27 // ...其他配置项 } }
按照上面的步骤逐一排查,应该就能解决密码切换按钮无法显示明文的问题了。
内容的提问来源于stack exchange,提问作者Ritu

