在用户专注于此之前,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>

我也尝试过为TextInputLayoutusing方法设置提示,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上,Nexus TextInputLayout行为异常,并且未显示嵌入式EditText的提示。
sashomasho 2015年

您可以检查提示颜色还是尝试更改视图背景颜色,也许它们在那里但由于颜色而看不到
Ultimo_m 2015年

@Ultimo_m我认为提示色一定不是问题。但是,我将尝试在更改背景颜色后看看。
Shajeel Afzal

1
@Shajeel Afzal我告诉你这个建议,因为我和你有同样的问题,当我在视图中添加背景时,我看到了提示。我正在片段中使用它。我没有从Java添加任何代码,我所做的只是从xml
Ultimo_m 2015年

2
添加/删除片段时,我看到此问题。但是,如果显示/隐藏片段,则看不到此问题。
Dave Jensen

Answers:


84

更新:

这是库的22.2.1版中已修复的错误。

原始答案:

如@shkschneider所述,这是一个已知的bug。Github用户@ ljubisa987最近发布了Gist来解决:

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

如评论中所述,该解决方法仅适用于Android Lollipop及更早版本。它不适用于Android M预览版。


1
Android MDC是预览版。
Dave Jensen

1
顺便说一句,该错误状态现在为“未来版本”。
Dave Jensen

2
这里的#28评论:code.google.com/p/android/issues/…对我
有用

1
已在版本22.2.1中修复。
Jdruwe

3
我们确定这在V22.2.1中已解决吗?我在Android版本5.1.1上运行的设计库v22.2.1中遇到此问题。我在“工具栏”中有两个EditText,我正在将其过渡到“活动”,并且直到重点显示为止,提示文本才显示。
StuStirling

13

这是一个 Android Design库的已知错误。已被接受分配

因此,您应该在下一个Android Design库版本中修复此问题。

同时,您可以查看问题跟踪器,以获取可能已发布在此处的hacky修复程序,但到目前为止,我还一无所知。

是的,它只影响棒棒糖及以上。


1
此问题已在22.2.1版本
山姆

11

这在设计库23.1.1中对我有用:

在TextInputLayout的xml属性中设置提示颜色:

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

textColorHint属性也为我修复了它。
2016年


5

您应该使用android.support.v7.widget.AppCompatEditTextas EditText并设置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 studio更新到最新版本。 在这里看到输出


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-v723.0.1compileSdkVersion23buildToolsVersion23.0.1的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'
}

更改支持设计版本时,是否需要更改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()。如果您尝试TextInputLayoutview具有animations或的上显示,则tranistions需要在animation或的末尾执行上述代码transition。只要确保上面的代码在UI上运行即可thread


0

当您在EditText上设置onFousListener时,似乎会出现此问题-尝试扩展EditText并支持多个onFocusListeners



0

解决的问题:转到您的应用程序的build.gradle并检查设计库。编译'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"

试试看。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.