TextInputLayout tidak menampilkan petunjuk EditText sebelum pengguna fokus padanya

96

Saya menggunakan baru-baru ini dirilis Pustaka Dukungan Desain Android yang untuk menampilkan label mengambang dengan EditTexts. Tetapi saya menghadapi masalah bahwa Petunjuk pada EditText tidak ditampilkan ketika UI dirender, tetapi saya melihat Petunjuk setelah saya fokus pada EditTexts.

Tata Letak saya adalah sebagai berikut:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <ScrollView
        android:id="@+id/ScrollView01"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin">

            <android.support.design.widget.TextInputLayout
                android:id="@+id/name_et_textinputlayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/activity_vertical_margin">

                <EditText
                    android:id="@+id/FeedBackerNameET"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/feedbackname"
                    android:inputType="textPersonName|textCapWords" />
            </android.support.design.widget.TextInputLayout>

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

                <EditText
                    android:id="@+id/FeedBackerEmailET"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/feedbackemail"
                    android:inputType="textEmailAddress" />

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

            <Spinner
                android:id="@+id/SpinnerFeedbackType"
                android:layout_width="fill_parent"
                android:layout_height="48dp"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:entries="@array/feedbacktypelist"
                android:prompt="@string/feedbacktype" />

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

                <EditText
                    android:id="@+id/EditTextFeedbackBody"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/feedbackbody"
                    android:inputType="textMultiLine|textCapSentences"
                    android:lines="5" />

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

            <CheckBox
                android:id="@+id/CheckBoxFeedBackResponse"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:text="@string/feedbackresponse" />

            <Button
                android:id="@+id/ButtonSendFeedback"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:text="@string/feedbackbutton" />
        </LinearLayout>
    </ScrollView>

</FrameLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:background="@drawable/toolbar_shadow" />
</FrameLayout>

Saya juga mencoba memberi petunjuk untuk TextInputLayoutmetode penggunaan setHinttetapi tidak berhasil.

mNameTextInputLayout = (TextInputLayout) v.findViewById(R.id.name_et_textinputlayout);
mNameTextInputLayout.setErrorEnabled(true);
mNameTextInputLayout.setHint(feedBackerNameET.getHint());

mEmailTextInputLayout = (TextInputLayout) v.findViewById(R.id.email_textinputlayout);
mEmailTextInputLayout.setErrorEnabled(true);
mEmailTextInputLayout.setHint(feedBackerEmail.getHint());

mBodyTextInputLayout = (TextInputLayout) v.findViewById(R.id.body_textinputlayout);
mBodyTextInputLayout.setErrorEnabled(true);
mBodyTextInputLayout.setHint(feedBackBody.getHint());
Shajeel Afzal
sumber
Saya memiliki masalah yang sama. Yang mengejutkan saya, menjalankan aplikasi pada emulator 4.1 bekerja dengan baik, tetapi pada pratinjau M saya yang mengaktifkan Nexus TextInputLayout tidak berfungsi dan tidak menunjukkan petunjuk untuk EditText yang disematkan.
sashomasho
Dapatkah Anda memeriksa warna petunjuk Anda, atau mencoba mengubah warna latar tampilan Anda, mungkin warna itu ada tetapi Anda tidak dapat melihat karena warnanya
Ultimo_m
@Ultimo_m saya pikir warna petunjuk pasti tidak menjadi masalah. Namun saya akan mencoba untuk melihat setelah mengubah warna latar belakang.
Shajeel Afzal
1
@ Shajeel Afzal Saya memberi tahu Anda saran ini karena saya memiliki masalah yang sama dengan Anda, dan ketika saya menambahkan latar belakang ke tampilan, saya melihat petunjuknya. Saya menggunakannya di dalam fragmen. Saya tidak menambahkan kode apa pun dari java, yang saya lakukan hanyalah dari xml
Ultimo_m
2
Saya melihat masalah ini saat saya menambahkan / menghapus fragmen. Tetapi jika saya menampilkan / menyembunyikan fragmen, saya tidak melihat masalah ini.
Dave Jensen

Jawaban:

84

Memperbarui:

Ini adalah bug yang telah diperbaiki pada versi 22.2.1 pustaka.

Jawaban Asli:

Seperti yang disebutkan oleh @shkschneider, ini adalah bug yang diketahui . Pengguna Github @ ljubisa987 baru-baru ini memposting inti untuk solusi:

https://gist.github.com/ljubisa987/e33cd5597da07172c55d

Seperti disebutkan dalam komentar, solusi ini hanya berfungsi di Android Lollipop dan yang lebih lama. Ini tidak berfungsi pada Pratinjau Android M.

Dave Jensen
sumber
1
Nah Android MDC adalah versi pratinjau.
Dave Jensen
1
BTW, sepertinya status bug sekarang menjadi "Rilis Masa Depan."
Dave Jensen
2
Komentar # 28 di sini: code.google.com/p/android/issues/… bekerja untuk saya
J_Sizzle
1
Diperbaiki dalam versi 22.2.1.
Jdruwe
3
Apakah kami yakin ini telah diperbaiki di V22.2.1? Saya mengalami masalah ini di pustaka desain v22.2.1 yang berjalan pada Android versi 5.1.1. Saya memiliki dua EditText di Toolbar tempat saya melakukan Transisi Aktivitas dan teks petunjuk tidak muncul sampai fokus.
StuStirling
13

Itu adalah bug yang diketahui dari pustaka Desain Android. Itu telah diterima dan ditetapkan .

Jadi, Anda harus memperbaikinya di rilis pustaka Desain Android berikutnya.

Sementara itu, Anda dapat melihat pelacak masalah untuk perbaikan hacky yang mungkin diposting di sana, tetapi saya tidak tahu apa-apa sampai sekarang.

Dan ya, itu hanya memengaruhi Lollipop ke atas.

shkschneider
sumber
1
Masalah ini diperbaiki dalam versi 22.2.1
Sam
11

Ini berfungsi untuk saya di Design Library 23.1.1:

Setel warna petunjuk di atribut xml TextInputLayout:

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...
Embydextrous
sumber
properti textColorHint juga memperbaikinya untuk saya.
JoM
6

Masalah ini telah diperbaiki dalam versi 22.2.1

Jdruwe
sumber
5

Anda harus menggunakan android.support.v7.widget.AppCompatEditTextsebagai EditTextdan mengatur android:hintseperti di bawah ini

<android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        <android.support.v7.widget.AppCompatEditText
                android:id="@+id/etx_first_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"                    
                android:inputType="text"
                android:hint="@string/hint_first_name"/>
    </android.support.design.widget.TextInputLayout>
Ahmad
sumber
3
   <android.support.design.widget.TextInputLayout
            android:id="@+id/editText1"
            android:layout_margin="15dp"
            android:layout_centerVertical="true"
            android:layout_width="match_parent"

            android:layout_height="wrap_content">

              <AutoCompleteTextView
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:singleLine="true"
                android:hint="Add City" />

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

Gunakan cuplikan kode ini. Pastikan aktivitas Anda adalah AppCompatActivity. Dan ketergantungan juga dengan versi terbaru

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'

Perbarui studio android ke versi terbaru. lihat keluarannya di sini

Ajinkya
sumber
3

Jika Anda menyetel petunjuk EditText secara terprogram, itu tidak akan berhasil! Anda perlu menyetel petunjuk pada TextInputLayout itu sendiri.

TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.usernameTextInputLayout);
textInputLayout.setHint(getString(R.string.username_hint));

Berikut adalah XML jika Anda bertanya-tanya:

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

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/usernameEt"
                android:layout_width="match_parent"
                android:layout_height="@dimen/default_height"
                android:layout_marginEnd="@dimen/default_margin"
                android:layout_marginStart="@dimen/default_margin"
                android:maxLength="@integer/username"
                tools:hint="Username" />

        </android.support.design.widget.TextInputLayout>
Muhammad Alfaifi
sumber
3

Masalah ini diatasi di v23.0.1perpustakaan desain dukungan. Saya juga memperbarui appcompat-v7ke 23.0.1, compileSdkVersionke 23& buildToolsVersionke 23.0.1di build.gradle .

android {    
compileSdkVersion 23
buildToolsVersion "23.0.1"
}

dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
Wahib Ul Haq
sumber
Apakah perlu mengubah compleSdkVersion, versi buildtools, dan appCompatVersion saat Anda mengubah versi desain dukungan ??
srinivas
Ini terjadi karena 'pustaka dukungan' v23 memerlukan API23 untuk mengompilasi proyek. Jadi hubungan utamanya adalah antara 'support libraries' dan 'compileSdkVersion'. Anda harus selalu cocok dengan 'compileSdkVersion' meskipun 'targetSdkVersion' atau 'minSdkVersion' lebih rendah. Alasannya sederhana, versi library mencerminkan versi SDK Android yang dibuat untuk itu.
Wahib Ul Haq
2

Saya memecahkan masalah saya dengan kode ini:

new Handler().postDelayed(
        new Runnable() {
            @Override
            public void run() {
                TextInputLayout til = (TextInputLayout) someParentView.findViewById(R.id.til);
                til.setHint("Your Hint Text");
                til.bringToFront();
            }
        }, 10);

Kuncinya di sini adalah bringToFront. Ini memaksa TextInputLayoutuntuk mengulang gambarnya, yang tidak sama dengan melakukan invalidate(). Jika Anda mencoba menampilkan TextInputLayouton a viewyang memiliki animationsatau tranistions, Anda perlu menjalankan kode di atas di akhir animationatau transition. Pastikan saja kode di atas berjalan di UI thread.

AndroidDev
sumber
0

Sepertinya masalah ini muncul saat Anda menyetel onFousListener pada EditText - coba perluas EditText dan dukung beberapa onFocusListeners

nartus
sumber
0

Masalah terpecahkan: Goto build.gradle dari aplikasi Anda dan periksa perpustakaan desain. kompilasi 'com.android.support:design:22.2.1' Seharusnya 22.2.1 atau yang lebih baru.

Abhishek
sumber
0

Masalahnya adalah warna petunjuknya. Menjadi putih saat mengetik sesuatu. Harap ubah warna petunjuk atau ubah warna latar belakang. Anda akan melihat petunjuk saat mengetik.

charitha amarasinghe
sumber
0

Ada solusi sederhana untuk ini karena ini berhasil untuk saya

<android.support.design.widget.TextInputLayout
    android:id="@+id/activity_login_til_password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="27dp"
    android:layout_marginTop="24dp"
    android:padding="10dp"
    app:passwordToggleEnabled="true"
    app:passwordToggleTint="#000000"
    app:passwordToggleDrawable="@drawable/passwordviewtoggleselector"
    android:theme="@style/Base.TextAppearance.AppCompat">
      <!---- add this line and theme as you need ----->
    <android.support.design.widget.TextInputEditText
        android:id="@+id/activity_login_et_password"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:hint="Password"
        android:inputType="textPassword"
        android:padding="10dp"
        android:textColor="#f5ab3a"
        android:textColorHint="#e6d2d1cf"
        android:textSize="20dp" />

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

Cukup tambahkan android: theme = "@ style / Base.TextAppearance.AppCompat" ke TextEditLayout dan itu akan berfungsi dan Anda dapat mengubah tema sesuai kebutuhan.

Manish Kumar Singh
sumber
0

Tambahkan saja: android:hint="your_hint"untuk TextInputLayout.

Pratik Karale
sumber
0

Saya menemukan sesuatu yang berbeda.

Saat mengatur gaya untuk fragment,

f1.setStyle(DialogFragment.STYLE_NO_FRAME,android.R.style.Theme_DeviceDefault_Light);

Bug hilang ketika saya mencoba Gaya yang berbeda dari "Theme_DeviceDefault_Dialog".

Cobalah.

Jorge Cardenas
sumber