사용자가 그것에 초점을 맞추기 전에 TextInputLayout에 EditText 힌트가 표시되지 않음


96

최근에 출시 된 Android 디자인 지원 라이브러리 를 사용하여 EditTexts로 플로팅 레이블을 표시하고 있습니다. 하지만 UI가 렌더링 될 때 EditText의 힌트가 표시되지 않는 문제에 직면했지만 EditTexts에 초점을 맞춘 후에 힌트가 표시됩니다.

내 레이아웃은 다음과 같습니다.

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

나는 또한 TextInputLayout사용 방법에 대한 힌트를 설정하려고 setHint했지만 운이 없습니다.

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

나도 같은 문제가있어. 놀랍게도 4.1 에뮬레이터에서 응용 프로그램을 실행하면 잘 작동했지만 M 미리보기에서 Nexus TextInputLayout이 오작동하고 포함 된 EditText에 대한 힌트를 표시하지 않았습니다.
sashomasho

힌트 색상을 확인하거나보기 배경색을 변경해 볼 수 있습니까? 아마도 거기에 있지만 색상 때문에 볼 수 없습니다
Ultimo_m

@Ultimo_m 힌트 색상이 문제가되지 않아야한다고 생각합니다. 그러나 나는 배경색을 변경 한 후 살펴볼 것입니다.
Shajeel Afzal 2015-06-01

1
@Shajeel Afzal 나는 당신과 같은 문제가 있었기 때문에이 제안을 말하고 있으며 뷰에 배경을 추가했을 때 힌트를 보았습니다. 조각 내부에서 사용하고 있습니다. 나는 자바에서 모든 코드를 추가 didnt는 모두 내가 한은 XML에서입니다
Ultimo_m

2
조각을 추가 / 제거 할 때이 문제가 나타납니다. 그러나 조각을 표시하거나 숨기면이 문제가 표시되지 않습니다.
데이브 젠슨

답변:


84

최신 정보:

이것은 라이브러리의 버전 22.2.1에서 수정 된 버그입니다.

원래 답변 :

@shkschneider가 언급했듯이 이것은 알려진 버그 입니다. Github 사용자 @ ljubisa987은 최근 해결 방법에 대한 Gist를 게시했습니다.

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

의견에서 언급했듯이 해결 방법은 Android Lollipop 및 이전 버전에서만 작동합니다. Android M 미리보기에서는 작동하지 않습니다.


1
Android MDC는 미리보기 버전입니다.
Dave Jensen

1
BTW, 버그 상태가 이제 "Future Release"인 것 같습니다.
Dave Jensen

2
여기에 댓글 # 28 : code.google.com/p/android/issues/… 작동합니다
J_Sizzle

1
버전 22.2.1에서 수정되었습니다.
Jdruwe

3
이것이 V22.2.1에서 수정 되었습니까? Android 버전 5.1.1에서 실행되는 디자인 라이브러리 v22.2.1에서이 문제가 발생합니다. 내가 활동 전환중인 툴바에 두 개의 EditText가 있고 힌트 텍스트가 초점을 맞출 때까지 표시되지 않습니다.
StuStirling 2015-08-17

13

이것은 Android 디자인 라이브러리 의 알려진 버그 입니다. 그것은되었습니다 접수할당 .

따라서 다음 Android 디자인 라이브러리 릴리스에서이 문제를 수정해야합니다.

그동안 이슈 트래커에서 거기에 게시 될 수있는 해키 픽스를 볼 수 있었지만 지금은 아무것도 모릅니다.

그리고 예, Lollipop 이상에만 영향을 미칩니다.


1
이 문제는 버전 22.2.1에서 해결되었습니다
Sam

11

이것은 Design Library 23.1.1에서 저에게 효과적입니다.

TextInputLayout의 xml 속성에서 힌트 색상을 설정합니다.

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

textColorHint 속성도 나를 위해 수정했습니다.
JOM

6

이 문제는 버전 22.2.1에서 해결되었습니다.


5

당신은 사용해야 android.support.v7.widget.AppCompatEditTextEditText설정하고 android:hint아래와 같이

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

이 코드 스 니펫을 사용하세요. 활동이 AppCompatActivity인지 확인하세요. 그리고 의존성은 또한 최신 버전과 함께

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

Android 스튜디오를 최신 버전으로 업데이트하십시오. 여기에서 출력 참조


3

EditText 힌트를 프로그래밍 방식으로 설정하는 경우 작동하지 않습니다! TextInputLayout 자체에 힌트를 설정해야합니다.

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

궁금한 점이있는 경우 XML은 다음과 같습니다.

        <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

이 문제는 v23.0.1지원 디자인 라이브러리 에서 해결되었습니다 . 나는 또한 내 업데이트 appcompat-v7에를 23.0.1, compileSdkVersion23& buildToolsVersion23.0.1build.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'
}

지원 디자인 버전을 변경할 때 compleSdkVersion, buildtools 버전 및 appCompatVersion을 변경해야합니까 ??
srinivas

'지원 라이브러리'v23에서 프로젝트를 컴파일하려면 API23이 필요하기 때문에 발생합니다. 따라서 주요 관계는 '지원 라이브러리'와 'compileSdkVersion'사이입니다. 'targetSdkVersion'또는 'minSdkVersion'이 더 낮더라도 항상 'compileSdkVersion'과 일치해야합니다. 그 이유는 간단합니다. 라이브러리 버전은 빌드 된 Android SDK 버전을 반영합니다.
Wahib Ul Haq

2

이 코드로 내 문제를 해결했습니다.

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

여기서 핵심은 bringToFront. 그것은 강제 TextInputLayout하고 동일하지 않습니다 그 도면을 다시 실행invalidate() 합니다. 당신이 표시하려는 경우 TextInputLayout켜짐 view이 그 animations또는 tranistions, 당신은의 끝에서 위의 코드를 실행해야 animation하거나 transition. 위의 코드가 UI에서 실행되는지 확인하십시오 thread.


0

EditText에서 onFousListener를 설정할 때이 문제가 나타나는 것 같습니다. EditText를 확장하고 여러 onFocusListeners를 지원해보십시오.



0

문제 해결 : 앱의 build.gradle로 이동하고 디자인 라이브러리를 확인합니다. compile 'com.android.support:design:22.2.1'22.2.1 이상이어야합니다.


0

문제는 힌트 색상입니다. 무언가를 입력하면 흰색이됩니다. 힌트 색상을 변경하거나 배경 색상을 변경하십시오. 입력하는 동안 힌트가 표시됩니다.


0

이것이 나를 위해 일했기 때문에 이것에 대한 간단한 해결책이 있습니다.

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

android : theme = "@ style / Base.TextAppearance.AppCompat" 를 TextEditLayout에 추가하기 만하면 작동해야하며 필요에 따라 테마를 변경할 수 있습니다.



0

나는 뭔가 다른 것을 발견했다.

에 대한 스타일을 설정할 때 fragment,

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

내가 다른 스타일을 시도했을 때 버그가 사라졌습니다 "Theme_DeviceDefault_Dialog".

시도 해봐.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.