98

我正在使用最近发布的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

17 回答 17

84

更新:

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

原答案:

正如@shkschneider 所提到的,这是一个已知的错误。Github 用户 @ljubisa987 最近发布了 Gist 以寻求解决方法:

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

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

于 2015-06-03T00:44:46.397 回答
13

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

所以你应该在下一个 Android 设计库版本中修复这个问题。

同时,您可以查看问题跟踪器以获取可能会在此处发布的 hacky-fix,但我目前还不知道。

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

于 2015-06-01T15:32:20.580 回答
12

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

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

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...
于 2016-03-04T12:48:04.863 回答
6

此问题已在版本 22.2.1 中修复

于 2015-07-18T14:06:47.120 回答
5

你应该使用android.support.v7.widget.AppCompatEditTextasEditText并设置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>
于 2015-05-30T07:58:39.217 回答
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'

将安卓工作室更新到最新版本。 在此处查看输出

于 2015-05-30T15:09:53.370 回答
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>
于 2015-08-24T18:56:08.187 回答
3

此问题已在v23.0.1支持设计库中得到解决。我还在 build.gradle 中更新了我appcompat-v7to 23.0.1compileSdkVersionto23buildToolsVersionto 。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'
}
于 2015-09-23T12:29:15.730 回答
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()。如果您尝试在具有or的TextInputLayouta上显示 ,则需要在or的末尾执行上述代码。只要确保上面的代码在 UI 上运行。viewanimationstranistionsanimationtransitionthread

于 2015-08-19T02:56:56.477 回答
1

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

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

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

于 2016-01-10T07:16:01.650 回答
0

只需添加:android:hint="your_hint"对于TextInputLayout.

于 2018-08-28T18:51:52.873 回答
0

我发现了一些不同的东西。

设置样式时fragment

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

当我尝试不同于"Theme_DeviceDefault_Dialog".

试试看。

于 2016-11-14T16:27:06.593 回答
0

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

于 2015-07-15T15:19:18.377 回答
0

问题已解决:转到您的应用程序的 build.gradle 并检查设计库。compile 'com.android.support:design:22.2.1' 它应该是 22.2.1 或更新版本。

于 2016-01-18T09:56:07.040 回答
0

问题是提示颜色。输入内容时它变成白色。请更改提示颜色或更改背景颜色。您将在键入时看到提示。

于 2017-10-16T06:43:30.527 回答
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 它应该可以工作,您可以根据需要更改主题。

于 2018-05-27T09:35:47.520 回答
0

如果您已将布局背景设置为白色,请在您的活动主题中使用它

 parent="Theme.MaterialComponents.Light.NoActionBar"
于 2021-07-02T07:45:46.083 回答