Ketika EditText dalam mode kata sandi, sepertinya petunjuk ditampilkan dalam font lain (kurir?). Bagaimana saya bisa menghindari ini? Saya ingin petunjuk untuk muncul dalam font yang sama ketika EditText tidak dalam mode kata sandi.
Xml saya saat ini:
<EditText
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true" />
android
fonts
passwords
android-edittext
hpique
sumber
sumber
Jawaban:
Mengubah jenis huruf dalam xml tidak berhasil pada teks petunjuk untuk saya juga. Saya menemukan dua solusi berbeda, yang kedua memiliki perilaku yang lebih baik untuk saya:
1) Hapus
android:inputType="textPassword"
dari file xml Anda dan sebagai gantinya, atur dalam java:Dengan pendekatan ini, font petunjuk terlihat bagus tetapi saat Anda mengetik di bidang edit itu, Anda tidak melihat setiap karakter dalam teks biasa sebelum berubah menjadi kata sandi. Juga saat membuat input dalam layar penuh, titik-titik tidak akan muncul, tetapi kata sandi dalam teks yang jelas.
2) Tinggalkan
android:inputType="textPassword"
xml Anda. Di Jawa, JUGA mengatur jenis huruf dan kata sandiMetode:Pendekatan ini memberi saya font petunjuk yang saya inginkan DAN memberi saya perilaku yang saya inginkan dengan titik-titik kata sandi.
Semoga itu bisa membantu!
sumber
password.setTransformationMethod(new PasswordTransformationMethod());
perlu? Tampaknya bekerja dengan baik untuk saya tanpa.setTransformationMethod()
keduanya. Namun, ada beberapa efek samping dari pendekatan ini yang membuatnya tidak diinginkan karena menghasilkan perilaku yang tidak standar dibandingkan dengantextPassword
perilaku standar . Untuk solusi yang lebih lengkap, lihat kelas helper di: stackoverflow.com/a/17582092/231078inputType="textPassword"
Saya menemukan tip yang berguna ini dari Panduan Dialog
Sebagai contoh
sumber
Inilah yang saya lakukan untuk memperbaiki masalah ini. Untuk beberapa alasan saya tidak perlu mengatur metode transformasi jadi ini mungkin solusi yang lebih baik:
Di xml saya:
Di saya
Activity
:sumber
Pendekatan setTransformationMethod merusak android: imeOption bagi saya, dan memungkinkan carriage return untuk diketik ke dalam bidang kata sandi. Sebaliknya saya melakukan ini:
Dan saya tidak mengatur android: password = "true" dalam XML.
sumber
Jawaban manisha yang diberikan tidak berfungsi, tetapi meninggalkan bidang kata sandi dalam keadaan tidak standar dibandingkan dengan yang standar. Yaitu, fontface default kemudian berlaku juga untuk bidang kata sandi, termasuk penggantian titik dan karakter pratinjau yang muncul sebelum diganti dengan titik-titik (serta ketika itu adalah bidang "kata sandi yang terlihat").
Untuk memperbaikinya dan membuatnya 1) terlihat dan bertindak persis seperti
textPassword
tipe input default , tetapi juga 2) memungkinkan teks petunjuk muncul di font default (non-monospace), Anda harus memilikiTextWatcher
bidang yang dapat beralih fontface dengan benar bolak-balik antaraTypeface.DEFAULT
danTypeface.MONOSPACE
berdasarkan pada apakah itu kosong atau tidak. Saya membuat kelas pembantu yang dapat digunakan untuk mencapai itu:Kemudian untuk memanfaatkannya, yang perlu Anda lakukan adalah memanggil
register(View)
metode statis. Segala sesuatu yang lain bersifat otomatis (termasuk melewatkan solusi jika tampilan tidak memerlukannya!):sumber
EditText
(misalnya membuat teks petunjuk Roboto Light), maka pengaturanTypeface.DEFAULT
nanti akan menimpa ini. Saya meneleponfield.getTypeface()
di muka dan menggunakan jenis huruf itu setiap kali saya perlu mengatur ulang ke font "default" nanti.field.getTypeface()
tampaknya tidak dapat diandalkan 100% (karena seringkali Anda hanya akan mendapatkan kembali font monospace), tetapi membuat Typeface viaTypeface.create()
dan kemudian pengaturan yang tampaknya berfungsi dengan baik.Ada banyak cara untuk menyelesaikan masalah ini tetapi setiap cara memiliki pro dan kontra. Ini pengujian saya
Saya hanya menghadapi masalah font ini di beberapa perangkat (daftar di akhir jawaban saya) saat mengaktifkan kata sandi input oleh
Jika saya gunakan
android:inputType="textPassword"
, masalah ini tidak terjadiSesuatu yang telah saya coba
1) Gunakan
setTransformationMethod
sajainputType
2) Gunakan
Typeface.DEFAULT
sans-serif-light
adalah font default untuk semuaView
di aplikasi saya => setelahsetTypeface(Typeface.DEFAULT)
,EditText
font masih terlihat berbeda di beberapa perangkat3) Gunakan
android:fontFamily="sans-serif"
SOLUSI SAYA
Menguji
beberapa perangkat menghadapi masalah font
Beberapa perangkat tidak menghadapi masalah font
sumber
setTransformationMethod
metode (di mana tidak menghadapi masalah).setTransformationMethod
akan berfungsi tetapi keyboard tidak akan ditampilkan dengan baik. Namun, jika Anda setuju dengan itu, itu masih oke karena itu hanya masalah kecilJawaban lain adalah solusi yang tepat untuk sebagian besar kasus.
Namun, jika Anda menggunakan
EditText
subkelas khusus untuk, misalnya, menerapkan font khusus secara default, ada masalah yang tidak kentara. Jika Anda mengatur font khusus di konstruktor subkelas Anda, font itu masih akan ditimpa oleh sistem jika Anda aturinputType="textPassword"
.Dalam hal ini, pindahkan styling ke
onAttachedToWindow
setelahsuper.onAttachedToWindow
panggilan Anda .Contoh implementasi:
sumber
Saya tahu ini mungkin yang lebih tua tetapi saya telah menemukan sesuatu yang berhubungan dengan masalah ini ketika saya menggunakan
InputType
danapp:passwordToggleEnabled="true"
bersama - sama.Jadi, tulis ini, karena dapat membantu seseorang di sini.
Saya ingin menggunakan bidang font khusus untuk kata sandi bersama dengan
app:passwordToggleEnabled
opsi untuk bidang input kata sandi saya. Tetapi dalam 27.1.1 (saat menulis ini) mendukung perpustakaan, itu menabrak.Jadi kodenya seperti di bawah ini,
Kode di atas tidak
inputType
didefinisikan dalam XMLDan di Jawa,
setTransformationMethod
akan membantu saya mendapatkan propertitextPassword
tipe input dan juga saya senang gaya font kustom saya.Tetapi kerusakan yang disebutkan di bawah ini terjadi di semua level API dengan 27.1.1 perpustakaan dukungan.
Ini crash karena kelas
onRestoreInstanceState
dalamTextInputLayout
.Langkah-Langkah Reproduksi: Ubah visibilitas kata sandi dan perkecil aplikasi dan buka dari aplikasi terbaru. Eh, ho Hancur!
Yang saya butuhkan adalah opsi sakelar kata sandi default (menggunakan perpustakaan dukungan) dan font khusus di bidang input kata sandi.
Setelah beberapa waktu, cari tahu dengan melakukan seperti di bawah ini,
Dalam XML, ditambahkan
android:inputType="textPassword"
Dalam kode java di atas,
Saya memperoleh jenis huruf khusus dari nama pengguna
EditText
dan menerapkannya keTextInputLayout
bidang kata sandi. Sekarang Anda tidak perlu mengatur jenis huruf secara eksplisit ke kata sandiEditText
karena akan memperolehTextInputLayout
properti.Juga, saya dihapus
password.setTransformationMethod(new PasswordTransformationMethod());
Dengan melakukan cara ini,
passwordToggleEnabled
berfungsi, font kustom juga diterapkan dan bye-bye ke crash. Semoga masalah ini akan diperbaiki dalam rilis dukungan mendatang.sumber
Anda juga dapat menggunakan Widget khusus. Ini sangat sederhana dan tidak mengacaukan kode Aktivitas / Fragmen Anda.
Ini kodenya:
Dan XML Anda akan terlihat seperti ini:
sumber
TextView
tampaknya menimpa jenis huruf kustom setelah panggilan konstruktor. Memberikan solusi untuk jawaban lain.gunakan perpustakaan kaligrafi .
maka itu masih tidak akan memperbarui bidang kata sandi dengan font yang tepat. jadi lakukan ini dalam kode bukan dalam xml:
sumber
Baru-baru ini saya menambahkan kemampuan untuk mengubah toggle monospace on / off ke ekstensi EditText khusus untuk kata sandi yang mungkin membantu beberapa orang. Itu tidak digunakan
android:fontFamily
sehingga kompatibel <16.sumber
Anda juga dapat menggunakan
bersama dengan
sumber
Saya menggunakan solusi ini untuk mengaktifkan Typeface tergantung pada visibilitas petunjuk. Ini mirip dengan jawaban Joe, tetapi memperluas EditText sebagai gantinya:
sumber
Jika Anda menggunakan perpustakaan kaligrafi dalam kombinasi dengan TextInputLayout dan EditText, kode berikut ini berfungsi dengan baik.
sumber
Suatu kasus yang aneh mungkin, tetapi saya telah bereksperimen dengan ini dan menemukan bahwa:
mengubah ukuran font petunjuk bukannya font itu sendiri! Ini masih merupakan efek yang tidak diinginkan. Anehnya, operasi sebaliknya:
Menyimpan ukuran font yang sama.
sumber
Saya menemukan solusi pasti untuk masalah ini
Cara terbaik untuk Halo, saya menemukan solusi pasti untuk masalah ini
Cara terbaik adalah dengan membuat editText kustom dan menyimpan nilai jenis huruf sebagai temp dan kemudian menerapkan metode untuk perubahan InputType, Akhirnya, kami mengatur kembali nilai wajah tipe temp ke editText. seperti itu:
sumber
Ini cara membuat kata sandi input yang memiliki petunjuk yang tidak dikonversi ke * dan jenis huruf default !!.
Pada XML:
Aktifitas Aktif:
terima kasih kepada: mangga dan rjrjr untuk wawasan: D.
sumber
seperti di atas tetapi pastikan bidang tidak memiliki gaya tebal di xml karena mereka tidak akan pernah terlihat sama bahkan dengan perbaikan di atas!
sumber