android - EditText中的DrawableButton可以显示/隐藏密码并更改DrawableEnd

标签 android kotlin android-edittext android-textinputlayout material-components-android

这是activity_register.xml:

<EditText
    android:id="@+id/editTextTextPassword"
    android:layout_width="346dp"
    android:layout_height="49dp"
    android:layout_marginTop="32dp"
    android:drawableStart="@drawable/ic_vpn_key"
    android:drawableEnd="@drawable/ic_visibility"
    android:ems="10"
    android:hint="@string/password_hint"
    android:inputType="textPassword"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.502"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editTextTextEmailAddress" />
所以,
我有密码EditText password edittext with drawable
单击drawableEnd时,您应该看到密码,而drawable应该更改为另一个密码,然后再次隐藏密码。
我找到了可以显示密码的教程->有效
__________________________更改可绘制对象->无效
但是,我在kotlin的可绘制对象中没有找到有关onClickListener的教程
问题简短
如果单击了可绘制对象,则代码显示密码,如果再次单击则再次隐藏密码。

最佳答案

您需要的是Material Componenets中的 TextInputLayout
这是您的操作方式:

  • 在build.gradle(app)文件中实现 Material 库为:
    implementation 'com.google.android.material:material:1.3.0-alpha01'
    
  • 然后,将XML的EditText更改为
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/passwordLayout"
        style="@style/TextInputLayoutAppearanceFilled"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="@string/password"
    
        app:endIconMode="password_toggle" //This is used to set the password toggle behavior
    
        app:startIconDrawable="@drawable/ic_lock_black_24dp">
    
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:textSize="@dimen/_12ssp" />
    
    </com.google.android.material.textfield.TextInputLayout>
    
  • 然后,在styles.xml中根据需要更改样式:
     <style name="TextInputLayoutAppearanceFilled" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
     <item name="hintTextAppearance">@style/HintText</item>
     <item name="helperTextTextAppearance">@style/HelperText</item>
    
     <item name="android:textColor">@color/dark_grey</item>
     <item name="android:textColorHint">@color/color</item>
     <item name="hintTextColor">@color/color</item>
     <item name="boxStrokeColor">@color/color</item>
     <item name="startIconTint">@color/color</item>
     <item name="endIconTint">@color/color</item>
     <item name="boxBackgroundColor">@color/white</item>
    
     <item name="boxCornerRadiusBottomEnd">@dimen/_26sdp</item>
     <item name="boxCornerRadiusBottomStart">@dimen/_26sdp</item>
     <item name="boxCornerRadiusTopEnd">@dimen/_26sdp</item>
     <item name="boxCornerRadiusTopStart">@dimen/_26sdp</item>
    
     <item name="boxStrokeWidthFocused">0dp</item>
    
     <!--This destroys the visible layout in layout editor so  first
     comment this out to design-->
     <!--<item name="boxStrokeWidth">0dp</item>-->
    
     <item name="hintEnabled">true</item>
    
     </style>
    
  • 这是输出的样子:
    enter image description here

  • 密码开关将完全按照您的要求工作,并且图标也将更改为另一个。您可以根据需要进一步对其进行自定义,请先查看官方文档- TextInputLayout

    关于android - EditText中的DrawableButton可以显示/隐藏密码并更改DrawableEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62603036/

    相关文章:

    android - 更改 AlertDialog 中“确定”按钮的颜色

    Android - MediaRecorder - 经常产生无法播放的输出

    java - 我可以使用 Java Scripting API 将 kotlin 作为脚本运行吗

    android - @Rule > 必须是 Kotlin Junit 测试中的公共(public) ValidationError

    java - [安卓] : java. lang.NoSuchFieldError: No field error_color_material

    android - Swiftkey 忽略 TextInputEditText 标志 InputType.TYPE_TEXT_FLAG_CAP_WORDS - 不大写

    java - Android:EditText.getText().toString() 不起作用

    Android 字体 ttf 或 otf 字体呈现随机符号/字母

    android - RemoteService - 在关闭启动 Activity 后重新启动

    android - 在 Android 上的 GridView 中使用哪种 stretchMode