当使用TextInputLayout时更改EditText提示文本的颜色

185

我正在使用设计库中的新TextInputLayout。我成功地让它显示并改变了浮动标签的颜色,但是输入框的提示文字始终是白色。我已尝试在XML、样式和程序上更改hintColor,并尝试使用android.support.v7.widget.AppCompatEditText,但是输入框的提示文字仍然是白色。

这是我TextInputLayoutEditText的XML代码:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android.support.design:hintTextAppearance="@style/GreenTextInputLayout">


    <EditText

    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/city"
        android:textColorHint="@color/black"
        android:hint="@string/city" />

</android.support.design.widget.TextInputLayout>

这是我用于TextInputLayout的样式(我尝试将hintTextColor属性设为黑色,但对我没有任何影响):

<style name="GreenTextInputLayout" parent="@style/TextAppearance.AppCompat">
    <item name="android:textColor">@color/homestory_green</item>
</style>
28个回答

10

你可以在TextInputLayout内部使用android:textColorHint="@color/color_black",这对我有效。

<android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dp_10"
                android:textColorHint="@color/color_black"
                app:hintTextAppearance="@style/TextLabel">

                <EditText
                    android:id="@+id/et_state"
                    style="@style/profile_editTextStyle"

                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/billingState"
                    android:text="@string/billingState"
                     />
            </android.support.design.widget.TextInputLayout>

8
根据这个页面:https://code.google.com/p/android/issues/detail?id=176559,请尝试以下操作:
<android.support.design.widget.TextInputLayout
    android:textColorHint="#A7B7C2"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <EditText
        android:id="@+id/et_confirm_password"
        android:textColor="@android:color/black"
        android:hint="Confirm password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 </android.support.design.widget.TextInputLayout>

在版本23.1.1中,它可以正常工作。


6
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Name"
                android:textColor="@color/black"
                android:textColorHint="@color/grey"/>
        </android.support.design.widget.TextInputLayout>

使用textColorHint属性可以设置EditText的提示文本颜色。需要注意的是,当EditText获得焦点时(伴随着一个炫酷的动画效果),其提示文本就会立即消失,而不是在你开始输入时。当你将焦点从EditText切换到其他区域后再次返回,你会清晰地看到这一点。

5

试试这个,可能会有帮助

      edittext.addTextChangedListener(new  TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "onTextChanged", 2000).show();;
            //newuser.setTextColor(Color.RED);
            edittext.setHintTextColor(Color.RED);

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "afterTextChanged", 2000).show();;

        }
    });

你为什么把它放在onTextChanged监听器中? - user25

5

看起来父视图有一个针对第三方库的样式,导致EditText变成了白色。

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

我移除了这个内容后,一切都正常了。


5

虽然有点晚了,但希望对某些人有所帮助。我已经这样做了。

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="30dp"
        android:layout_marginStart="30dp"
        android:textColorHint="#8cffffff">

        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/email_edit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/security_email"
            android:inputType="textEmailAddress"
            android:textColor="@color/white"
            app:backgroundTint="#8cffffff" />
    </android.support.design.widget.TextInputLayout>

4
<item name="colorAccent">@android:color/black</item>

将您的colorAccent更改为所需的颜色,放入主题中,这将更改您的EditText行、光标以及提示。

或者你也可以在style.xml中包含此样式。

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@android:color/black</item>
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@android:color/black</item>
    <item name="colorControlNormal">@android:color/black</item>
    <item name="colorControlActivated">@android:color/black</item>
</style>

然后,在TextInputLayout中,您可以像这样放置它
<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/TextLabel">
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/password"
                android:drawableStart="@drawable/password"
                android:maxLines="1"
                android:hint="password"
                android:inputType="textWebPassword" />

        </android.support.design.widget.TextInputLayout>

4

根据文档:

应该在TextInputLayout上设置提示,而不是EditText。如果在XML中指定了子EditText上的提示,则TextInputLayout可能仍能正常工作;TextInputLayout将使用EditText的提示作为其浮动标签。但是,对提示进行修改的未来调用将不会更新TextInputLayout的提示。为避免意外行为,请在TextInputLayout上调用setHint(CharSequence)和getHint(),而不是在EditText上。

尝试在TextInputLayout上设置android:hintapp:hintTextColor,而不是在TextInputEditText上设置。


3

这应该100%有效

android:textColorHint="@color/white"

2
这里是google材料设计文本输入布局的完整自定义。这可能对你有所帮助。
<com.google.android.material.textfield.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="@dimen/_24sdp"
        android:layout_marginTop="@dimen/_24sdp"
        android:hint="@string/username"
        android:textColorHint="@color/tint"
        app:hintEnabled="true"
        app:hintAnimationEnabled="false"
        app:startIconDrawable="@drawable/ic_user"
        app:startIconTint="@color/tint"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/guideline"
        app:boxCornerRadiusBottomEnd="@dimen/_45sdp"
        app:boxCornerRadiusBottomStart="@dimen/_45sdp"
        app:boxCornerRadiusTopEnd="@dimen/_45sdp"
        app:boxCornerRadiusTopStart="@dimen/_45sdp"
        app:boxStrokeColor="@color/red"
        app:boxStrokeWidth="@dimen/_1sdp"
        <!-- for password 
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/tint" -->
        >
        <com.google.android.material.textfield.TextInputEditText 
            android:layout_width="match_parent" 
            android:layout_height="@dimen/_40sdp" 
            android:padding="0dp" 
            android:fontFamily="@font/poppins_medium" 
            android:textColor="@color/black" 
            android:inputType="textEmailAddress"/>
    </com.google.android.material.textfield.TextInputLayout>

不太有帮助,请修改您的回答。 - NSV.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接