Когда EditText находится в режиме пароля, кажется, что подсказка отображается другим шрифтом (курьер?). Как я могу избежать этого? Я хотел бы, чтобы подсказка отображалась тем же шрифтом, что и когда EditText не находится в режиме пароля.
Мой текущий xml:
<EditText
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true" />
Ответы:
Изменение шрифта в xml также не сработало для текста подсказки. Я нашел два разных решения, второе из которых имеет лучшее поведение для меня:
1) Удалите
android:inputType="textPassword"
из вашего XML-файла и вместо этого установите его в Java:При таком подходе шрифт подсказки выглядит хорошо, но когда вы печатаете в этом поле редактирования, вы не видите каждый символ в виде простого текста, пока он не превратится в точку пароля. Кроме того, при вводе в полноэкранном режиме, точки не отображаются, но пароль в виде открытого текста.
2) Оставьте
android:inputType="textPassword"
в своем XML. В Java ТАКЖЕ установить гарнитуру и passwordMethod:Этот подход дал мне шрифт подсказки, который я хотел И дал мне поведение, которое я хочу с точками пароля.
Надеюсь, это поможет!
источник
password.setTransformationMethod(new PasswordTransformationMethod());
необходимо? Кажется, работает нормально для меня без.setTransformationMethod()
либо. Однако у этого подхода есть некоторые побочные эффекты, которые делают его нежелательным, поскольку он приводит к нестандартному поведению по сравнению с поведением по умолчаниюtextPassword
. Для более полного решения см. Вспомогательный класс по адресу: stackoverflow.com/a/17582092/231078inputType="textPassword"
Я нашел этот полезный совет в Руководстве по диалогам
Например
источник
Это то, что я сделал, чтобы исправить эту проблему. По какой-то причине мне не пришлось устанавливать метод преобразования, так что это может быть лучшим решением:
В моем XML:
По моему
Activity
:источник
Подход setTransformationMethod ломает для меня android: imeOption и позволяет вводить возврат каретки в поле пароля. Вместо этого я делаю это:
И я не устанавливаю Android: пароль = "истина" в XML.
источник
Ответ, предоставленный manisha, работает, но он оставляет поле пароля в нестандартном состоянии по сравнению со значением по умолчанию. Таким образом, шрифт по умолчанию затем применяется также к полю пароля, включая как замены точек, так и символы предварительного просмотра, которые появляются перед заменой на точки (а также когда это поле «видимый пароль»).
Чтобы это исправить и сделать так, чтобы 1) выглядел и действовал точно так же, как
textPassword
тип ввода по умолчанию , но также 2) позволял тексту подсказки отображаться шрифтом по умолчанию (не моноширинный), вам нужно иметьTextWatcher
поле on, которое может переключать Шрифт правильно и обратно междуTypeface.DEFAULT
и вTypeface.MONOSPACE
зависимости от того, является ли он пустым или нет. Я создал вспомогательный класс, который можно использовать для достижения этой цели:Затем, чтобы использовать его, все, что вам нужно сделать, это вызвать
register(View)
статический метод. Все остальное происходит автоматически (включая пропуск обходного пути, если представление не требует этого!):источник
EditText
(например, сделав текст подсказки Roboto Light), то настройкаTypeface.DEFAULT
позже отменит это. Я вызываюfield.getTypeface()
сразу и использую эту гарнитуру всякий раз, когда мне нужно позже вернуться к шрифту «по умолчанию».field.getTypeface()
не кажутся надежными на 100% (так как часто вы просто возвращаете моноширинный шрифт), но создаете гарнитуру с помощьюTypeface.create()
и затем настройку, которая, кажется, работает хорошо.Есть много способов решения этой проблемы, но у каждого есть свои плюсы и минусы. Вот мое тестирование
Я сталкиваюсь с этой проблемой шрифтов только на каком-то устройстве (список в конце моего ответа), когда разрешить ввод пароля
Если я использую
android:inputType="textPassword"
, этой проблемы не случилосьЧто-то я пробовал
1) Используйте
setTransformationMethod
вместоinputType
2) Использование
Typeface.DEFAULT
sans-serif-light
- это шрифт по умолчанию для всехView
в моем приложении => послеsetTypeface(Typeface.DEFAULT)
,EditText
шрифт по-прежнему выглядит по- другому на некоторых устройствах3) Использование
android:fontFamily="sans-serif"
МОЕ РЕШЕНИЕ
Тестирование
Некоторое устройство сталкивается с проблемой шрифта
Некоторые устройства не сталкиваются с проблемой шрифтов
источник
setTransformationMethod
метод (где не сталкивался с проблемой).setTransformationMethod
будет работать, но клавиатура не будет отображаться хорошо. Тем не менее, если вы согласны с этим, то это все еще хорошо, потому что это просто небольшая проблемаДругие ответы являются правильным решением для большинства случаев.
Однако, если вы используете пользовательский
EditText
подкласс, скажем, для применения пользовательского шрифта по умолчанию, возникает небольшая проблема. Если вы установите собственный шрифт в конструкторе вашего подкласса, он все равно будет перезаписан системой, если вы установитеinputType="textPassword"
.В этом случае переместите ваш стиль на
onAttachedToWindow
послеsuper.onAttachedToWindow
вызова.Пример реализации:
источник
Я знаю, что это может быть более старый, но я столкнулся с чем-то связанным с этой проблемой, когда я использовал
InputType
иapp:passwordToggleEnabled="true"
вместе.Итак, пишите это, так как это может помочь кому-то здесь.
Я хочу использовать пользовательский шрифт в поле пароля вместе с
app:passwordToggleEnabled
опцией для моего поля ввода пароля. Но в 27.1.1 (при написании этой) библиотеки поддержки она вылетала.Таким образом, код был как ниже,
Выше код не
inputType
определен в XMLИ в Java,
setTransformationMethod
поможет мне приобрести свойства типаtextPassword
ввода, а также я рад, что мой собственный стиль шрифта.Но нижеупомянутый сбой произошел на всех уровнях API с библиотекой поддержки 27.1.1.
Это было сбой из-за
onRestoreInstanceState
внутреннегоTextInputLayout
класса.Воспроизвести шаги. Переключите видимость пароля, сверните приложение и откройте его из последних приложений. Ой, хо разбился!
Все, что мне нужно, это опция переключения пароля по умолчанию (с помощью библиотеки поддержки) и пользовательский шрифт в поле ввода пароля.
Через некоторое время разобрался, сделав, как показано ниже,
В XML добавлено
android:inputType="textPassword"
В приведенном выше коде Java,
Я получил пользовательский шрифт от имени пользователя
EditText
и применил его кTextInputLayout
полю пароля. Теперь вам не нужно явно устанавливать гарнитуру для пароля, такEditText
как он получитTextInputLayout
свойство.Также я удалил
password.setTransformationMethod(new PasswordTransformationMethod());
Таким образом,
passwordToggleEnabled
работает, пользовательский шрифт также применяется и до свидания до сбоя. Надеюсь, что эта проблема будет исправлена в следующих выпусках поддержки.источник
Вы также можете использовать собственный виджет. Это очень просто и не загромождает ваш код действия / фрагмента.
Вот код:
И ваш XML будет выглядеть так:
источник
TextView
кажется, внутренне перезаписывают пользовательский шрифт после вызова конструктора. Предусмотрен обходной путь в другом ответе.использовать библиотеку каллиграфии .
тогда это все еще не обновит поля пароля с правильным шрифтом. так что делайте это в коде, а не в XML:
источник
Недавно я добавил возможность изменения вкл / выкл монопространства для расширения EditText специально для паролей, это может помочь некоторым людям. Он не использует,
android:fontFamily
поэтому совместим <16.источник
Вы также можете использовать
вместе с
источник
Я использую это решение для переключения гарнитуры в зависимости от видимости подсказки. Это похоже на ответ Джо, но вместо этого расширяет EditText:
источник
Если вы используете библиотеку каллиграфии в сочетании с TextInputLayout и EditText, следующий код работает хорошо.
источник
Странный случай, возможно, но я экспериментировал с этим и обнаружил, что:
изменил размер шрифта подсказки вместо самого шрифта! Это все еще нежелательный эффект. Как ни странно, обратная операция:
Сохраняет одинаковый размер шрифта.
источник
Я нашел верное решение этой проблемы
Лучший способ Привет, я нашел верное решение этой проблемы
Лучший способ - создать собственный editText и сохранить значение гарнитуры как темп, а затем применить метод к изменениям InputType. Наконец, мы возвращаем значение шрифта типа temp к editText. вот так :
источник
Это как сделать ввод пароля с подсказкой, которая не конвертируется в * и шрифтом по умолчанию !!
По XML:
На активность:
спасибо: манго и Rjrjr за понимание: D.
источник
как и выше, но убедитесь, что поля не выделены жирным шрифтом в xml, так как они никогда не будут выглядеть одинаково даже с вышеуказанным исправлением!
источник