如果以编程方式设置提示,则 TextInputLayout 在聚焦时不显示提示

TextInputLayout doesn't show hint when focused if the hint was set programmatically

我正在这样做:

<android.support.design.widget.TextInputLayout
                android:id="@+id/inputLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <AutoCompleteTextView
                    android:id="@+id/email"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textEmailAddress"
                    android:maxLines="1"
                    android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

然后是这个:

mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
mEmailView.setHint("Email");

并且提示显示在 EditText 上,但在聚焦时不会显示在其上方。我可以在 TextInputLayout 上设置提示,但我会在 EditText 中同时获得提示。这是一个错误还是我做错了什么?

谢谢。

明白了,对我来说似乎是个错误。

基本上我必须:

    mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
    mEmailView.setHint("Email");
    TextInputLayout textInputLayout= (TextInputLayout) 
    findViewById(R.id.inputLayout);
    textInputLayout.setHintEnabled(false);
    textInputLayout.setHintEnabled(true);

不要在子 EditText 上使用 setHint(),您应该直接在 TextInputLayout 上调用它:

TextInputLayout textInputLayout = (TextInputLayout)findViewById(R.id.inputLayout);
textInputLayout.setHint("Email");

这应该开箱即用,无需额外 "hacks"。

TextInputLayout 确实尝试从内部 EditText 提示初始化它的提示,但它只在创建时才这样做,如果找不到它,它什么都不做,所以这就是为什么你需要通过调用 setHintEnabled()...

使其成为 "try again"

我想文档应该更清楚地描述这种细微差别。