Обратный вызов при переключении пароля в TextInputLayout - PullRequest
1 голос
/ 14 октября 2019

Я выбрал TextInputEditText для своего поля пароля, чтобы использовать функцию переключения пароля.

Вот мой код xml:

        <com.google.android.material.textfield.TextInputLayout
        android:layout_width="@dimen/login_width"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="@dimen/password_margin_top"
        app:hintEnabled="false"
        app:passwordToggleDrawable="@drawable/password_toggle_drawable"
        app:passwordToggleEnabled="true">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/my_login_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif"
            android:hint="@string/password"
            android:inputType="textPassword"
            android:nextFocusDown="@+id/my_login_login"
            android:padding="@dimen/field_padding" />
    </com.google.android.material.textfield.TextInputLayout>

Мне нужно сделать некоторые другие изменения макета напереключающий пароль. Есть ли обратный вызов для этого в TextInputLayout?

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете вызвать setEndIconOnClickListener на вашем TextInputLayout:

textInputLayout.setEndIconOnClickListener { v ->
    // Layout changes here
}

Однако это удаляет прослушиватель щелчков, отвечающий за переключение метода преобразования пароля. Я бы предложил просто скопировать код прослушивателя кликов в PasswordToggleEndIconDelegate и добавить свою собственную функциональность сверху:

textInputLayout.setEndIconOnClickListener {
    val editText: EditText? = textInputLayout.editText
    // Store the current cursor position
    val selection = editText?.selectionEnd ?: 0

    // Check for existing password transformation
    val hasPasswordTransformation = editText?.transformationMethod is PasswordTransformationMethod;
    if (hasPasswordTransformation) {
        editText?.transformationMethod = null
    } else {
        editText?.transformationMethod = PasswordTransformationMethod.getInstance()
    }

    // Restore the cursor position
    editText?.setSelection(selection)

    // Add additional functionality here
}

Редактировать: Этот метод доступен только в версии библиотеки материалов 1.1.0-alpha04 и далее, и на момент написания, 1.1.0 все еще в бета-версии.

...