在用户关注它之前,TextInputLayout不显示EditText提示

我正在使用最近发布的Androiddevise支持库来显示带有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> 

我也尝试使用setHint方法设置TextInputLayout提示,但没有运气。

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

更新:

这是一个已经在库的22.2.1版中修复的bug。

原始答案:

正如@shkschneider所述,这是一个已知的错误 。 Github用户@ ljubisa987最近发布了一个解决scheme的要点:

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

正如在评论中指出的,解决方法只适用于Android棒棒糖和更旧的。 它不适用于Android M Preview。

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

所以你应该在下一个Androiddevise库版本中解决这个问题。

与此同时,你可以看问题跟踪器的哈克修复,可能会张贴在那里,但我不知道任何截至目前。

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

此问题已在22.2.1版中修复

这在devise库23.1.1中适用于我:

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

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

你应该使用android.support.v7.widget.AppCompatEditText作为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> 
  <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到最新版本。 看到输出在这里

如果您以编程方式设置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> 

此问题已在支持devise库的v23.0.1中解决。 我也更新了我的appcompat-v723.0.1compileSdkVersion23buildToolsVersion23.0.1 23.0.1

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

我用这个代码解决了我的问题:

 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重做它的graphics,这和做invalidate()不一样。 如果您正尝试在具有animationstranistionsview上显示TextInputLayout ,则需要在animationtransition结束时执行上述代码。 只要确保上面的代码在UI thread上运行。

看起来像这个问题出现在EditText上设置onFousListener时 – 尝试扩展EditText并支持多个onFocusListeners

设置与EditText背景对比的提示颜色。

<item name="android:textColorHint">#FF424242</item>

有关:
在EditText中的setHintTextColor()
使用TextInputLayout时更改EditText提示颜色
如何更改TextInputLayout的浮动标签颜色

解决的问题:转到你的应用程序的build.gradle,并检查devise库。 编译'com.android.support:design:22.2.1'它应该是22.2.1或更新。

我发现了不同的东西。

设置片段的样式时,

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

当我尝试不同的样式比“Theme_DeviceDefault_Dialog”错误消失了。

试一试。

问题是提示颜色。 打字时会变白。 请更改提示颜色或更改背景颜色。 您将在input时看到提示。