Kata sandi teks InputType di TextInputLayout

Saya telah membuat formulir di aplikasi Android. Ini terlihat seperti ini. Screenshot Yang saya inginkan adalah tampilan teks di semua petunjuk harus konsisten. Jika saya menggunakan inputType = "textpassword" memberikan efek konfirmasi kata sandi yang berbeda (tebal) dari tampilan lain. Kata sandi bidang juga memiliki tipe input yang sama tetapi teks editnya tidak ada di dalam tata letak input teks. Kode untuk field adalah sebagai berikut

1>bidang kata sandi

 <EditText
       android:id="@+id/registerPasswordEt"
       fontPath="fonts/Proxima_Nova_Light.ttf"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="Password *"
       android:fontFamily="sans-serif"
       android:textStyle="normal"
       android:inputType="textPassword"
       android:maxLines="1"
       android:nextFocusDown="@+id/registerConfirmPasswordEt" />

2> Konfirmasi kata sandi

<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_confirm_password" 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/input_layout_password">

            <EditText
                android:id="@+id/registerConfirmPasswordEt"
                fontPath="fonts/Proxima_Nova_Light.ttf"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fontFamily="sans-serif"
                android:hint="Confirm Password ( must match password ) *"
                android:inputType="textPassword"
                android:maxLines="1"
                android:nextFocusDown="@+id/registerUserNameEt"
                android:textStyle="normal" />

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

3> Bidang lainnya

<android.support.design.widget.TextInputLayout
                    android:id="@+id/input_layout_last_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/registerLastNameEt"
                        fontPath="fonts/Proxima_Nova_Light.ttf"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Last Name *"
                        android:inputType="textPersonName"
                        android:maxLines="1"
                        android:nextFocusDown="@+id/registerPasswordEt" />

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

Yang saya inginkan adalah semua teks terlihat serupa dan saya memerlukan TextInputLayout untuk efek animasi. Apakah ada cara untuk membuat tampilan teks sama?


person SarojMjn    schedule 08.05.2017    source sumber
comment
Coba hapus jenis font dari kolom konfirmasi kata sandi karena Anda telah menerapkan font ke kolom editteks tersebut dan periksa di UI.   -  person Bhavnik    schedule 08.05.2017
comment
Saya mencobanya tetapi tidak berhasil. Seperti yang Anda lihat pada gambar, bidang tersebut memiliki petunjuk yang dicetak tebal tetapi lainnya (ukuran font, dll) tampaknya baik-baik saja. Jika bracketing texinputlayout, edittext dihapus, tampilan akan berperilaku seperti yang diharapkan tetapi saya memerlukannya untuk dikurung oleh textinputlayout.   -  person SarojMjn    schedule 09.05.2017


Jawaban (4)


Hapus inputType dari editText dari file xml dan tambahkan baris berikut dalam kode Java Anda:

EditText registerConfirmPasswordEt = (EditText) findViewById(R.id.registerConfirmPasswordEt_text);
registerConfirmPasswordEt.setTransformationMethod(new PasswordTransformationMethod());
person R.R.M    schedule 08.05.2017
comment
Ini hanya berfungsi jika Anda tidak memiliki textinputlayout yang mengurung teks edit. - person SarojMjn; 09.05.2017
comment
Tidak. Saya telah menggunakannya dalam banyak kode yang memiliki tata letak input teks. Ini berfungsi dengan baik. - person R.R.M; 09.05.2017
comment
Tidak berhasil untuk saya. Saya memiliki TextInputLayout dan TextInputEditText di dalamnya. - person Azizjon Kholmatov; 03.12.2019

Saya memasukkan kode Anda dan itu menunjukkan bidang konfirmasi kata sandi sama dengan bidang lainnya... Saya memposting kode di bawah, perbaiki saya Jika saya salah (fontPath lib tidak digunakan dalam kode ini)...

Tangkapan Layar

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_confirm_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/inputLayout">

        <EditText
            android:id="@+id/registerConfirmPasswordEt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fontFamily="sans-serif"
            android:hint="Confirm Password ( must match password ) *"
            android:textColor="@color/white"
            android:inputType="textPassword"
            android:maxLines="1"
            android:nextFocusDown="@+id/registerUserNameEt"
            android:textStyle="normal" />

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

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_last_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/inputLayout">

        <EditText
            android:id="@+id/registerLastNameEt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Last Name *"
            android:inputType="textPersonName"
            android:maxLines="1"
            android:nextFocusDown="@+id/registerPasswordEt" />

    </android.support.design.widget.TextInputLayout>
person Bhavnik    schedule 09.05.2017
comment
Terima kasih atas tanggapannya. Saya menemukan masalahnya sedikit berbeda. Saya telah menyebutkannya dalam jawaban saya di bawah - person SarojMjn; 09.05.2017
comment
Saya baru saja memposting jawabannya, silakan lihat. - person SarojMjn; 09.05.2017

Masalahnya bukan pada kaligrafi perpustakaan. Saya telah mencoba menghapusnya dan menggunakan Font xml* asli, tetapi mengalami masalah yang sama.

Dalam kasus saya terinspirasi oleh SarojMjn, perbaiki tampilan menggunakan metode ini

public static  void fixHintTextInputLayoutForPassword(Context context, TextInputLayout password,CharSequence text){
    SpannableString spannableConfirmPasswordHint = new SpannableString(text);
    spannableConfirmPasswordHint.setSpan(ResourcesCompat.getFont(context, R.font.lato_light), 0, spannableConfirmPasswordHint.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    password.setHint(spannableConfirmPasswordHint);
    password.setTypeface(ResourcesCompat.getFont(context, R.font.lato_light));
}

migrasi ke font xml asli itu sederhana tetapi hasil akhirnya tidak terlalu bagus dalam kasus saya, lihat pertanyaan

person Gianluca Musa    schedule 08.02.2018

Masalahnya karena kaligrafi perpustakaan. Masalah di atas terjadi ketika Anda memiliki perpustakaan kaligrafi dan mengedit teks dengan kata sandi jenis input di dalam TextInputLayout. Solusi yang saya temukan adalah sebagai berikut.

Typeface confirmPasswordFace = Typeface.createFromAsset(getAssets(), CalligraphyConfig.get().getFontPath());
        inputLayoutConfirmPassword.setTypeface(confirmPasswordFace);  // or Typeface.NORMAL or any other

        CalligraphyTypefaceSpan confrmPasswordTypefaceSpan = TypefaceUtils.getSpan(confirmPasswordFace);
        SpannableString spannableConfirmPasswordHint = new SpannableString("Confirm Password ( must match password ) *");
        spannableConfirmPasswordHint.setSpan(confrmPasswordTypefaceSpan, 0, spannableConfirmPasswordHint.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

        inputLayoutConfirmPassword.setHint(spannableConfirmPasswordHint);
person SarojMjn    schedule 09.05.2017