Привет, я использую kotlin для установки шрифта подсказки для TextInputLayout как:
passwordTextLayout.typeface = Typeface.createFromAsset(context.assets, "fonts/af/myfont.ttf")
где myfont.ttf - это файл личного шрифта
это работает только тогда, когда подсказка находится/помещается в текстовом редакторе textinputlayout, но когда я щелкнул текст редактирования и начал печатать подсказку, она свернулась, и он изменил шрифт на какой-то шрифт по умолчанию!
Я хочу использовать один и тот же тип лица для подсказки в обоих условиях, т.е. когда подсказка находится внутри текста редактирования и когда он сворачивается.
Изображение, когда подсказка находится внутри текста редактирования (см. F для изменения шрифта):
Рисунок, когда пользователь щелкает внутри текста редактирования, шрифт изменяется как (проверьте символ f):
Попробуйте добавить эту строку в ваш TextInputLayout:
style="@style/MyStyle"
Затем создаем запись в styles.xml:
<style name="MyStyle">
<item name="android:textColor">#fff</item>
<item name="android:textSize">16sp</item>
<item name="android:fontFamily">"@fonts/myfont.ttf"</item>
</style>
и посмотрим, что получится.
У меня есть ответ, ребята! Просто проверьте, когда меняется фокус, и всякий раз, когда он меняет фокус, просто установите желаемую гарнитуру! Быть как:
passwordEditTextInsidePasswordTextLayout.onFocusChangeListener =
View.OnFocusChangeListener { _, _ -> passwordTextLayout.typeface = Typeface.createFromAsset(context.assets, "fonts/af/myfont.ttf") }
На самом деле я ищу изменение фокуса на тексте редактирования внутри макета ввода, и всякий раз, когда он меняет фокус, я переназначаю шрифт. Обратите внимание, что вы должны были установить гарнитуру, когда всплывающее окно с вашими действиями/фрагментами, поэтому в oncreate вы должны вызывать это перед вышеперечисленными слушателями:
passwordTextLayout.typeface = Typeface.createFromAsset(context.assets, "fonts/af/myfont.ttf")
Хорошо, очевидно, есть проблема с гарнитурами в TextInputLayouts с password
inputType. Если вы используете TextView.setInputType() с любым из:
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
InputType.TYPE_TEXT_VARIATION_PASSWORD
InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD
InputType.TYPE_NUMBER_VARIATION_PASSWORD
... тогда Android применяет шрифт Monospace.
Я думаю, что лучшим решением будет сделать следующее:
PasswordTransformation
в коде:,
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setTransformationMethod(PasswordTransformationMethod.getInstance());