Font petunjuk kata sandi di Android

255

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" />
hpique
sumber
1
Perhatikan bahwa tidak semua perangkat berperilaku seperti ini. "HTC One X @ 4.1.1" tidak (monospace). "Samsung GT-7510 @ 4.0.4" tidak. (font yang sama)
Loda
1
Perilaku yang sama pada LeWa OS 4.2.2. API terlalu tidak konsisten ..
ruX
masih ada di lollipop juga
Mightian
Anda dapat memeriksa jawaban saya di sini berharap ini berfungsi.
Dmila Ram

Jawaban:

394

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:

EditText password = (EditText) findViewById(R.id.password_text);
password.setTransformationMethod(new PasswordTransformationMethod());

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:

EditText password = (EditText) findViewById(R.id.register_password_text);
password.setTypeface(Typeface.DEFAULT);
password.setTransformationMethod(new PasswordTransformationMethod());

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!

manisha
sumber
3
Hebat, ini beberapa perilaku aneh, Anda tidak akan mengharapkan dari default!
Sander Versluys
15
Apakah ini password.setTransformationMethod(new PasswordTransformationMethod());perlu? Tampaknya bekerja dengan baik untuk saya tanpa.
loeschg
1
Saya tidak perlu menggunakan setTransformationMethod()keduanya. Namun, ada beberapa efek samping dari pendekatan ini yang membuatnya tidak diinginkan karena menghasilkan perilaku yang tidak standar dibandingkan dengan textPasswordperilaku standar . Untuk solusi yang lebih lengkap, lihat kelas helper di: stackoverflow.com/a/17582092/231078
Joe
10
Lebih baik lagi, lihat solusi sederhana yang luar biasa ini dalam jawaban tepat di halaman ini: stackoverflow.com/a/18073897
Marcin Koziński
16
Perlu diketahui bahwa menggunakan solusi pertama adalah ide yang buruk - pengguna yang memiliki saran otomatis diaktifkan akan mulai melihat kata sandi mereka di aplikasi lain, disarankan kepada mereka, karena EditText tidak dinyatakan sebagaiinputType="textPassword"
Elad Nava
193

Saya menemukan tip yang berguna ini dari Panduan Dialog

Tip: Secara default, ketika Anda mengatur elemen EditText untuk menggunakan jenis input "textPassword", keluarga font diatur ke monospace, jadi Anda harus mengubah keluarga font-nya menjadi "sans-serif" sehingga kedua bidang teks menggunakan font yang cocok gaya.


Sebagai contoh

android:fontFamily="sans-serif"
aysonje
sumber
21
Ini harus menjadi jawaban yang diterima. Ini lebih sederhana dan dari dokumen.
Marcin Koziński
29
Itu bagus, kecuali bahwa itu hanya bekerja pada API level 16 dan di atasnya
Ben Clayton
6
Perhatikan bahwa sementara itu hanya bekerja pada API level 16 dan di atasnya, atribut xml tidak menyebabkan crash pada perangkat yang lebih lama, mereka hanya diabaikan.
Adam Johns
Ini tidak akan berfungsi jika Anda mengklik tampilkan / sembunyikan kata sandi beberapa kali
Ali Habbash
32

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:

<EditText
    android:id="@+id/password_edit_field"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Password"
    android:inputType="textPassword" />

Di saya Activity:

EditText password = (EditText) findViewById( R.id.password_edit_field );
password.setTypeface( Typeface.DEFAULT );
James McCracken
sumber
Saya baru saja mencobanya dengan textPassword dalam XML dan seperti yang Anda lakukan dalam file .java, dan itu berhasil dengan baik. Bagi saya, sepertinya tidak membutuhkan transformasi
Joe Plante
2
Pengingat: Call setTypeface () SETELAH Anda mengubah InputType dengan kode. setTransformationMethod tidak diperlukan jika InputType menyertakan xx_VARIATION_PASSWORD;
Loda
21

Pendekatan setTransformationMethod merusak android: imeOption bagi saya, dan memungkinkan carriage return untuk diketik ke dalam bidang kata sandi. Sebaliknya saya melakukan ini:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);

Dan saya tidak mengatur android: password = "true" dalam XML.

rjrjr
sumber
ya, ini bekerja untuk saya di 6.0.1 juga, jawaban yang dipilih tidak
Nactus
5

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 textPasswordtipe input default , tetapi juga 2) memungkinkan teks petunjuk muncul di font default (non-monospace), Anda harus memiliki TextWatcherbidang yang dapat beralih fontface dengan benar bolak-balik antara Typeface.DEFAULTdan Typeface.MONOSPACEberdasarkan pada apakah itu kosong atau tidak. Saya membuat kelas pembantu yang dapat digunakan untuk mencapai itu:

import android.graphics.Typeface;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;

/**
 * This class watches the text input in a password field in order to toggle the field's font so that the hint text
 * appears in a normal font and the password appears as monospace.
 *
 * <p />
 * Works around an issue with the Hint typeface.
 *
 * @author jhansche
 * @see <a
 * href="http://stackoverflow.com/questions/3406534/password-hint-font-in-android">http://stackoverflow.com/questions/3406534/password-hint-font-in-android</a>
 */
public class PasswordFontfaceWatcher implements TextWatcher {
    private static final int TEXT_VARIATION_PASSWORD =
            (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
    private TextView mView;

    /**
     * Register a new watcher for this {@code TextView} to alter the fontface based on the field's contents.
     *
     * <p />
     * This is only necessary for a textPassword field that has a non-empty hint text. A view not meeting these
     * conditions will incur no side effects.
     *
     * @param view
     */
    public static void register(TextView view) {
        final CharSequence hint = view.getHint();
        final int inputType = view.getInputType();
        final boolean isPassword = ((inputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION))
                == TEXT_VARIATION_PASSWORD);

        if (isPassword && hint != null && !"".equals(hint)) {
            PasswordFontfaceWatcher obj = new PasswordFontfaceWatcher(view);
            view.addTextChangedListener(obj);

            if (view.length() > 0) {
                obj.setMonospaceFont();
            } else {
                obj.setDefaultFont();
            }
        }
    }

    public PasswordFontfaceWatcher(TextView view) {
        mView = view;
    }

    public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
        // Not needed
    }

    public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
        if (s.length() == 0 && after > 0) {
            // Input field went from empty to non-empty
            setMonospaceFont();
        }
    }

    public void afterTextChanged(final Editable s) {
        if (s.length() == 0) {
            // Input field went from non-empty to empty
            setDefaultFont();
        }
    }

    public void setDefaultFont() {
        mView.setTypeface(Typeface.DEFAULT);
    }

    public void setMonospaceFont() {
        mView.setTypeface(Typeface.MONOSPACE);
    }
}

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!):

    final EditText txtPassword = (EditText) view.findViewById(R.id.txt_password);
    PasswordFontfaceWatcher.register(txtPassword);
Joe
sumber
1
Kerja bagus. Satu perubahan kecil: jika Anda mengatur font pada EditText(misalnya membuat teks petunjuk Roboto Light), maka pengaturan Typeface.DEFAULTnanti akan menimpa ini. Saya menelepon field.getTypeface()di muka dan menggunakan jenis huruf itu setiap kali saya perlu mengatur ulang ke font "default" nanti.
Christopher Orr
Yah, menelepon field.getTypeface()tampaknya tidak dapat diandalkan 100% (karena seringkali Anda hanya akan mendapatkan kembali font monospace), tetapi membuat Typeface via Typeface.create()dan kemudian pengaturan yang tampaknya berfungsi dengan baik.
Christopher Orr
5

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

edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

Jika saya gunakan android:inputType="textPassword", masalah ini tidak terjadi

Sesuatu yang telah saya coba

1) Gunakan setTransformationMethodsajainputType

edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
  • Font akan bekerja dengan baik
  • Tampilan keyboard tidak terlalu baik (hanya menampilkan teks, tidak menampilkan nomor di atas teks)

2) Gunakan Typeface.DEFAULT

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);
  • Tampilan keyboard dengan baik ,
  • Font mungkin tidak berfungsi dengan baik . Contohnya sans-serif-lightadalah font default untuk semua Viewdi aplikasi saya => setelah setTypeface(Typeface.DEFAULT), EditTextfont masih terlihat berbeda di beberapa perangkat

3) Gunakan android:fontFamily="sans-serif"

SOLUSI SAYA

cache jenis huruf sebelum setInputTypekemudian menggunakannya kembali

Typeface cache = edtPassword.getTypeface();
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTypeface(cache);

Menguji
beberapa perangkat menghadapi masalah font

  • Xiaomi A2 (8.0.1)
  • Pixel XL (8.1.0)
  • Sony Xperia Z5 Au (SOV32) (6.0)
  • Panah NX (F-04G) (6.0.1)
  • Kyocera (S2) (7.0)

Beberapa perangkat tidak menghadapi masalah font

  • Samsung S4 (SC-04E) (5.0.1)
  • Samsung Galaxy Node 5 (5.1.1)
  • Samsung S7 Edge (SM-G935F) (7.0)
Phan Van Linh
sumber
Apa itu perangkat (nama dan OS)?
CoolMind
1
@CoolMind terima kasih atas saran Anda, saya telah memperbarui perangkat masalah font wajah dan perangkat tidak menghadapi masalah font pada perangkat saya saat ini
Phan Van Linh
Terima kasih atas pengujian besar! Saya datang dari stackoverflow.com/a/52178340/2914140 . Pada Samsung S4 saya menggunakan setTransformationMethodmetode (di mana tidak menghadapi masalah).
CoolMind
Seperti yang saya sebutkan dalam jawaban saya, setTransformationMethodakan berfungsi tetapi keyboard tidak akan ditampilkan dengan baik. Namun, jika Anda setuju dengan itu, itu masih oke karena itu hanya masalah kecil
Phan Van Linh
4

Jawaban lain adalah solusi yang tepat untuk sebagian besar kasus.

Namun, jika Anda menggunakan EditTextsubkelas 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 atur inputType="textPassword".

Dalam hal ini, pindahkan styling ke onAttachedToWindowsetelah super.onAttachedToWindowpanggilan Anda .

Contoh implementasi:

package net.petosky.android.ui;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

/**
 * An EditText that applies a custom font.
 *
 * @author [email protected]
 */
public class EditTextWithCustomFont extends EditText {

    private static Typeface customTypeface;

    public EditTextWithCustomFont(Context context) {
        super(context);
    }

    public EditTextWithCustomFont(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextWithCustomFont(
            Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * Load and store the custom typeface for this app.
     *
     * You should have a font file in: project-root/assets/fonts/
     */
    private static Typeface getTypeface(Context context) {
        if (customTypeface == null) {
            customTypeface = Typeface.createFromAsset(
                    context.getAssets(), "fonts/my_font.ttf");
        }
        return customTypeface;
    }

    /**
     * Set a custom font for our EditText.
     *
     * We do this in onAttachedToWindow instead of the constructor to support
     * password input types. Internally in TextView, setting the password
     * input type overwrites the specified typeface with the system default
     * monospace.
     */
    @Override protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        if (!isInEditMode()) {
            setTypeface(getTypeface(getContext()));
        }
    }
}
Cory Petosky
sumber
3

Saya tahu ini mungkin yang lebih tua tetapi saya telah menemukan sesuatu yang berhubungan dengan masalah ini ketika saya menggunakan InputTypedan app: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:passwordToggleEnabledopsi untuk bidang input kata sandi saya. Tetapi dalam 27.1.1 (saat menulis ini) mendukung perpustakaan, itu menabrak.

Jadi kodenya seperti di bawah ini,

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_10dp"
        android:layout_marginTop="@dimen/_32dp"
        android:hint="@string/current_password"
        android:textColorHint="@color/hint_text_color"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/black">


        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|left"
            android:maxLines="1"
            android:textAlignment="viewStart"
            android:textColor="@color/black"
            android:textColorHint="@color/camel"
            android:textSize="@dimen/txt_16sp"
            app:font_style="regular"
            app:drawableEnd="@drawable/ic_remove_eye" />

    </android.support.design.widget.TextInputLayout>

Kode di atas tidak inputTypedidefinisikan dalam XML

EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());

Dan di Jawa, setTransformationMethodakan membantu saya mendapatkan properti textPasswordtipe 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.

java.lang.NullPointerException: Mencoba untuk memanggil metode virtual 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' pada referensi objek nol

Ini crash karena kelas onRestoreInstanceStatedalam TextInputLayout.

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,

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_10dp"
        android:layout_marginTop="@dimen/_32dp"
        android:hint="@string/current_password"
        android:textColorHint="@color/hint_text_color"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/black">


        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|left"
            android:maxLines="1"
            android:textAlignment="viewStart"
            android:textColor="@color/black"
            android:textColorHint="@color/camel"
            android:textSize="@dimen/txt_16sp"
            app:font_style="regular"
            app:drawableEnd="@drawable/ic_remove_eye"
            android:inputType="textPassword" />

    </android.support.design.widget.TextInputLayout>

Dalam XML, ditambahkan android:inputType="textPassword"

TextInputLayout inputPassword = findViewById(R.id.input_password);
EditText password = findViewById(R.id.password);
EditText userName = findViewById(R.id.user_name);
// Get the typeface of user name or other edit text
Typeface typeface = userName.getTypeface();
if (typeface != null)
   inputLayout.setTypeface(typeface); // set to password text input layout

Dalam kode java di atas,

Saya memperoleh jenis huruf khusus dari nama pengguna EditTextdan menerapkannya ke TextInputLayoutbidang kata sandi. Sekarang Anda tidak perlu mengatur jenis huruf secara eksplisit ke kata sandi EditTextkarena akan memperoleh TextInputLayoutproperti.

Juga, saya dihapus password.setTransformationMethod(new PasswordTransformationMethod());

Dengan melakukan cara ini, passwordToggleEnabledberfungsi, font kustom juga diterapkan dan bye-bye ke crash. Semoga masalah ini akan diperbaiki dalam rilis dukungan mendatang.

Kavin Prabhu
sumber
2

Anda juga dapat menggunakan Widget khusus. Ini sangat sederhana dan tidak mengacaukan kode Aktivitas / Fragmen Anda.

Ini kodenya:

public class PasswordEditText extends EditText {

  public PasswordEditText(Context context) {
    super(context);
    init();
  }

  public PasswordEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();

  }

  public PasswordEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
  }

  private void init() {
    setTypeface(Typeface.DEFAULT);
  }
}

Dan XML Anda akan terlihat seperti ini:

<com.sample.PasswordEditText
  android:id="@+id/password_edit_field"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:hint="Password"
  android:inputType="textPassword"
  android:password="true" />
Aldo Borrero
sumber
Dalam pengalaman saya ini tidak berfungsi - secara internal TextViewtampaknya menimpa jenis huruf kustom setelah panggilan konstruktor. Memberikan solusi untuk jawaban lain.
Cory Petosky
2

gunakan perpustakaan kaligrafi .

maka itu masih tidak akan memperbarui bidang kata sandi dengan font yang tepat. jadi lakukan ini dalam kode bukan dalam xml:

Typeface typeface_temp = editText.getTypeface();
editText.setInputType(inputType); /*whatever inputType you want like "TYPE_TEXT_FLAG_NO_SUGGESTIONS"*/
//font is now messed up ..set it back with the below call
editText.setTypeface(typeface_temp); 
j2emanue
sumber
0

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:fontFamilysehingga kompatibel <16.

scottyab
sumber
0

Anda juga dapat menggunakan

<android.support.design.widget.TextInputLayout/>

bersama dengan

<android.support.v7.widget.AppCompatEditText/>
DoruChidean
sumber
0

Saya menggunakan solusi ini untuk mengaktifkan Typeface tergantung pada visibilitas petunjuk. Ini mirip dengan jawaban Joe, tetapi memperluas EditText sebagai gantinya:

public class PasswordEditText extends android.support.v7.widget.AppCompatEditText {

    public PasswordEditText(Context context) {
        super(context);
    }

    public PasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        if (text.length() > 0) setTypeface(Typeface.MONOSPACE);
        else setTypeface(Typeface.DEFAULT);
    }

}
KTCO
sumber
0

Jika Anda menggunakan perpustakaan kaligrafi dalam kombinasi dengan TextInputLayout dan EditText, kode berikut ini berfungsi dengan baik.

    EditText password = (EditText) findViewById(R.id.password);
    TextInputLayout passwordLayout = (TextInputLayout) findViewById(R.id.passwordLayout);

    Typeface typeface_temp = password.getTypeface();
    password.setInputType(InputType.TYPE_CLASS_TEXT |
            InputType.TYPE_TEXT_VARIATION_PASSWORD); 

    password.setTypeface(typeface_temp);
    passwordLayout.setTypeface(typeface_temp);
Philipp Hellmayr
sumber
Ini tidak mengubah jenis tip petunjuk saya
Rafael Ruiz Muñoz
0

Suatu kasus yang aneh mungkin, tetapi saya telah bereksperimen dengan ini dan menemukan bahwa:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setTransformationMethod(new PasswordTransformationMethod());

mengubah ukuran font petunjuk bukannya font itu sendiri! Ini masih merupakan efek yang tidak diinginkan. Anehnya, operasi sebaliknya:

password.setTransformationMethod(new PasswordTransformationMethod());
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

Menyimpan ukuran font yang sama.

MPelletier
sumber
0

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:

public class AppCompatPasswordEditText extends AppCompatEditText {


    public AppCompatPasswordEditText(Context context) {
        super(context);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        Typeface cache = getTypeface();

        if (!isInEditMode() && cache != null) {
            setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            setTypeface(cache);
        }
    }

}
Mr.Hosseini
sumber
-1

Ini cara membuat kata sandi input yang memiliki petunjuk yang tidak dikonversi ke * dan jenis huruf default !!.

Pada XML:

android:inputType="textPassword"
android:gravity="center"
android:ellipsize="start"
android:hint="Input Password !."

Aktifitas Aktif:

inputPassword.setTypeface(Typeface.DEFAULT);

terima kasih kepada: mangga dan rjrjr untuk wawasan: D.

Bhimbim
sumber
-2

seperti di atas tetapi pastikan bidang tidak memiliki gaya tebal di xml karena mereka tidak akan pernah terlihat sama bahkan dengan perbaikan di atas!

Dori
sumber
2
Jangan katakan "di atas" ... segalanya berubah seiring waktu :-)
ZaBlanc