TextInputLayout không hiển thị gợi ý EditText trước khi người dùng tập trung vào nó


96

Tôi đang sử dụng được phát hành gần đây Thư viện hỗ trợ thiết kế Android để hiển thị nhãn nổi với EditTexts. Nhưng tôi đang gặp phải vấn đề là Gợi ý trên EditText không hiển thị khi giao diện người dùng được hiển thị, nhưng tôi thấy Gợi ý sau khi tôi tập trung vào EditText.

Bố cục của tôi như sau:

<?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>

Tôi cũng đã cố gắng đặt gợi ý cho TextInputLayoutphương pháp sử dụng setHintnhưng không may mắn.

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());

Tôi có cùng một vấn đề. Tôi ngạc nhiên khi chạy ứng dụng trên trình giả lập 4.1 hoạt động tốt, nhưng trên bản xem trước M của tôi, Nexus TextInputLayout được kích hoạt đã hoạt động sai và không hiển thị gợi ý cho EditText được nhúng.
sashomasho

Bạn có thể kiểm tra màu gợi ý của mình hoặc cố gắng thay đổi màu nền chế độ xem của bạn, có thể chúng ở đó nhưng bạn không thể nhìn thấy do màu sắc
Ultimo_m.

@Ultimo_m Tôi nghĩ màu gợi ý chắc không có vấn đề gì. Tuy nhiên, tôi sẽ cố gắng nhìn lại sau khi thay đổi màu nền.
Shajeel Afzal

1
@Shajeel Afzal Tôi cho bạn biết gợi ý này vì tôi cũng gặp vấn đề giống bạn và khi tôi thêm nền vào chế độ xem, tôi đã thấy gợi ý. Tôi đang sử dụng nó bên trong một mảnh vỡ. Tôi didnt thêm bất kỳ mã từ java, tất cả tôi đã làm là từ xml
Ultimo_m

2
Tôi gặp sự cố này khi thêm / xóa các đoạn. Nhưng nếu tôi hiển thị / ẩn các đoạn, tôi không thấy vấn đề này.
Dave Jensen

Câu trả lời:


84

Cập nhật:

Đây là một lỗi đã được sửa trong phiên bản 22.2.1 của thư viện.

Câu trả lời gốc:

Như đã đề cập bởi @shkschneider, đây là một lỗi đã biết . Người dùng Github @ ljubisa987 gần đây đã đăng một Gist cho một giải pháp:

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

Như đã lưu ý trong các nhận xét, cách giải quyết chỉ hoạt động trên Android Lollipop trở lên. Nó không hoạt động trên Android M Preview.


1
Vâng, Android MDC là phiên bản xem trước.
Dave Jensen

1
BTW, có vẻ như trạng thái lỗi hiện là "Bản phát hành trong tương lai".
Dave Jensen

2
Comment # 28 ở đây: code.google.com/p/android/issues/... công trình đối với tôi
J_Sizzle

1
Đã sửa trong phiên bản 22.2.1.
Jdruwe,

3
Chúng tôi có chắc chắn điều này đã được khắc phục trong V22.2.1? Tôi đang gặp sự cố này trong thư viện thiết kế v22.2.1 chạy trên phiên bản Android 5.1.1. Tôi có hai EditText trong Thanh công cụ mà tôi đang Chuyển đổi Hoạt động sang và văn bản gợi ý không hiển thị cho đến khi được tập trung.
StuStirling

13

Đó là một lỗi đã biết của thư viện Thiết kế Android. Nó đã được chấp nhậnchỉ định .

Vì vậy, bạn nên sửa lỗi này trong bản phát hành thư viện Thiết kế Android tiếp theo.

Trong thời gian chờ đợi, bạn có thể xem trình theo dõi vấn đề để biết bản sửa lỗi có thể được đăng ở đó, nhưng tôi không biết bất kỳ điều gì cho đến bây giờ.

Và có, nó chỉ ảnh hưởng đến Lollipop trở lên.


1
Sự cố này được khắc phục trong phiên bản 22.2.1
Sam

11

Điều này phù hợp với tôi trong Thư viện thiết kế 23.1.1:

Đặt màu gợi ý trong thuộc tính xml của TextInputLayout:

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...

thuộc tính textColorHint cũng đã sửa nó cho tôi.
JoM

6

Sự cố này được khắc phục trong phiên bản 22.2.1


5

bạn nên sử dụng android.support.v7.widget.AppCompatEditTextnhư EditTextvà đặt android:hintnhư bên dưới

<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>

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>

Sử dụng đoạn mã này. Đảm bảo hoạt động của bạn là AppCompatActivity. Và sự phụ thuộc cũng có ở các phiên bản mới nhất

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

Cập nhật studio android lên phiên bản mới nhất. xem đầu ra ở đây


3

Nếu bạn đang đặt gợi ý EditText của mình theo chương trình, nó sẽ không hoạt động! Bạn cần tự đặt gợi ý trên TextInputLayout.

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

Đây là XML trong trường hợp bạn đang thắc mắc:

        <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>

3

Sự cố này được giải quyết trong v23.0.1thư viện thiết kế hỗ trợ. Tôi cũng được cập nhật của tôi appcompat-v7đến 23.0.1, compileSdkVersionđể 23& buildToolsVersionđể 23.0.1trong 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'
}

Có cần thiết phải thay đổi phiên bản compleSdkVersion, buildtools và appCompatVersion khi bạn đang thay đổi phiên bản thiết kế hỗ trợ không ??
srinivas

Điều này xảy ra do 'thư viện hỗ trợ' v23 yêu cầu API23 biên dịch dự án. Vì vậy, mối quan hệ chính là giữa 'thư viện hỗ trợ' và 'compileSdkVersion'. Bạn phải luôn khớp với 'compileSdkVersion' ngay cả khi 'targetSdkVersion' hoặc 'minSdkVersion' thấp hơn. Lý do rất đơn giản, phiên bản của thư viện phản ánh phiên bản của sdk Android chống lại nó được xây dựng.
Wahib Ul Haq

2

Tôi đã giải quyết vấn đề của mình với mã này:

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);

Chìa khóa ở đây là bringToFront. Nó buộc TextInputLayoutphải làm lại bản vẽ của nó, điều này không giống như làm invalidate(). Nếu bạn đang cố gắng hiển thị TextInputLayouttrên một viewanimationshoặc tranistions, bạn cần thực thi đoạn mã trên ở cuối dấu animationhoặc transition. Chỉ cần đảm bảo rằng mã trên chạy trên giao diện người dùng thread.


0

Có vẻ như sự cố này xuất hiện khi bạn đặt onFousListener trên EditText - hãy thử mở rộng EditText và hỗ trợ nhiều onFocusListener



0

Vấn đề đã được giải quyết: Goto build.gradle của ứng dụng ur và kiểm tra thư viện thiết kế. biên dịch 'com.android.support:design:22.2.1' Nó phải là 22.2.1 hoặc mới hơn.


0

Vấn đề là màu gợi ý. Nó trở nên trắng khi gõ một cái gì đó. Vui lòng thay đổi màu gợi ý hoặc thay đổi màu nền. Bạn sẽ thấy gợi ý trong khi nhập.


0

Có một giải pháp đơn giản cho điều này vì điều này đã làm việc cho tôi

<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>

Chỉ cần thêm android: theme = "@ style / Base.TextAppearance.AppCompat" vào TextEditLayout và nó sẽ hoạt động và bạn có thể thay đổi chủ đề khi cần.



0

Tôi tìm thấy một cái gì đó khác nhau.

Khi đặt kiểu cho fragment,

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

Lỗi đã biến mất khi tôi thử các Kiểu khác "Theme_DeviceDefault_Dialog".

Hãy thử một lần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.