You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中app:passwordToggleEnabled不显示问题求助

密码切换按钮不显示的解决指引

问题说明

作为Android开发新手,开发登录功能时,已在com.google.android.material.textfield.TextInputLayout中设置app:passwordToggleEnabled="true"和app:passwordToggleTint属性,但密码切换按钮始终不显示,相关代码如下:

XML布局代码

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/blue"
        style="@style/Widget.Material3.TextInputLayout.OutlinedBox">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:hint="@string/contrase_a"
            android:inputType="textPassword"/>

    </com.google.android.material.textfield.TextInputLayout>

Gradle依赖配置

implementación(platform("com.google.firebase:firebase-bom:33.1.1"))
    implementation("com.google.firebase:firebase-analytics")
    implementation("com.google.firebase:firebase-auth: 22.1.1")
    implementation("com.google.android.material:material:1.12.0")
    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.material3)
    implementation("androidx.core:core-splashscreen:1.0.1")
    implementation(libs.androidx.constraintlayout)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    implementation(libs.androidx.activity)
    implementation(libs.firebase.auth.ktx)

styles.xml代码

<style name="GFSTextInputLayoutTheme" parent="Widget.Material3.TextInputLayout.OutlinedBox">
        <!-- Hint color and label color in FALSE state -->
        <item name="android:textColorHint">@color/light_grey</item>
        <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
        <item name="colorAccent">@color/light_grey</item>
        <item name="colorControlNormal">@color/light_grey</item>
        <item name="colorControlActivated">@color/light_blue</item>
    </style>

解决步骤

  • 确认输入类型正确性:确保TextInputEditText的android:inputType设置为textPassword或textWebPassword,这是密码切换按钮显示的前提条件,当前代码已设置正确,但需避免额外设置TransformationMethod覆盖默认行为。
  • 统一Material库依赖:Gradle中同时存在com.google.android.material:material:1.12.0和libs.material两个Material库依赖,属于重复依赖,可能引发组件样式冲突。删除其中一个,建议保留明确版本的依赖项,确保版本统一。
  • 检查主题兼容性:当前使用的是Material3的Widget.Material3.TextInputLayout.OutlinedBox样式,需确认应用的全局主题是否继承自Material3主题(如Theme.Material3.DayNight.NoActionBar),非Material3主题可能导致Material3组件样式异常。
  • 验证按钮可见性:检查app:passwordToggleTint设置的@color/blue是否与TextInputLayout的背景色对比度不足,导致按钮“隐身”。可临时将颜色改为@color/red这类高对比度颜色测试是否显示。
  • 应用自定义样式:尝试将TextInputLayout的style属性改为自定义的@style/GFSTextInputLayoutTheme,而非默认的Material3样式,排查是否是默认样式的属性覆盖导致按钮不显示。

内容的提问来源于stack exchange,提问作者Carlo Mena Mendez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:50:08