文本输入时,textinputlayout更改textcolorhint

时间:2018-08-24 12:56:05

标签: android textcolor android-textinputlayout

小的补充:当TextInputLayout / EditText未聚焦时,不在聚焦状态与非聚焦状态之间,我需要一种方法


我正在寻找一种方法来更改textColorHint的{​​{1}}属性仅当TextInputLayout中存在文本时(直接来自XML)

如果我使用该属性TextInputEditText,则即使android:textColorHint="@color/black"为空,它也会更改提示颜色。

是否可以在两种状态下为提示设置两种不同的颜色? 我添加了一些图片以更好地解释

我想要什么:

  • 文本为空时empty
  • 填充文字时text

我不想要的东西:

  • 提示具有“带有文字”的颜色wrong

后脚本:是的,在这个示例中,我可以使用两种以上的不同颜色,但是无论如何它应该是可以理解的:P

4 个答案:

答案 0 :(得分:1)

假设您采用两种颜色,假设文本为空时为 color1 ,填充文本时为 color2 ,请尝试以下方法。

填充文本时

<style name="TextAppearance.App.TextInputLayout_filled" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/color2</item>
    <item name="android:textSize">@dimen/text_size_12</item>

</style>

文本为空时

<style name="TextAppearance.App.TextInputLayout_empty" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/color1</item>
    <item name="android:textSize">@dimen/text_size_12</item>

</style>

主题

<style name="TextLabel" parent="TextAppearance.AppCompat">

    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/color1</item>
    <item name="android:textSize">@dimen/text_size_16</item>

</style>

TextInputLayout的XML

<android.support.design.widget.TextInputLayout
    android:id="@+id/til_first_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/TextLabel"
    app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout_filled">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/edt_first_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/first_name_caps"
        android:imeOptions="actionNext"
        android:maxLines="1"
        android:nextFocusForward="@+id/til_last_name"
        android:singleLine="true"
        android:textColor="@android:color/black"/>
</android.support.design.widget.TextInputLayout>

和代码

edt_first_name.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {

            if (edt_first_name.getText().toString().length() > 0){
                til_first_name.setHintTextAppearance(R.style.TextAppearance_App_TextInputLayout_filled);
            }else {
                til_first_name.setHintTextAppearance(R.style.TextAppearance_App_TextInputLayout_empty);
            }

        }
});

答案 1 :(得分:0)

使用样式

<style name="TextInputLayout" parent="@android:style/TextAppearance">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/color_hint</item>
    <item name="android:textColor">@color/color_black</item>
    <item name="android:fontFamily">@font/helveticaneue</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/color_hint</item>
    <item name="colorControlNormal">@color/color_hint</item>
    <item name="colorControlActivated">@color/color_hint</item>
    <item name="colorControlHighlight">@color/color_hint</item>
</style>

在xml中使用此样式

   <android.support.design.widget.TextInputLayout
                android:id="@+id/layoutFirstName"
                style="@style/TextInputLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/_8sdp"
                app:hintTextAppearance="@style/TextInputStyle.Hint">

                <android.support.design.widget.TextInputEditText
                    android:id="@+id/editFirstName"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/first_name"
                    android:imeOptions="actionDone"
                    android:inputType="text"
                    android:importantForAutofill="noExcludeDescendants"
                    android:theme="@style/InputTextEditTextNew" />
            </android.support.design.widget.TextInputLayout>

答案 2 :(得分:0)

对于TextInputEditText,请使用以下属性设置提示颜色为空:
android:textColorHint="@color/yourcolor"
如果不为空,则必须使用以下样式设置浮动提示的颜色:

<style name="TextInputLayoutStyle" parent="TextAppearance.AppCompat">
    <item name="colorControlNormal">@color/colornormalcolor</item>
    <item name="colorControlActivated">@color/anothercolor</item>
</style>

并在TextInputLayout xml中使用它:

android:theme="@style/TextInputLayoutStyle"

答案 3 :(得分:0)

经过一些研究,我们似乎无法仅通过xml布局实现我们正在寻找的。为此,我们绝对需要自定义set.seed(1) df <- data.frame( x = sample(LETTERS[1:10]), y = rnorm(10), z = runif(10) ) start <- c("C", "E", "F") df2 <- df %>% mutate(start = x %in% start, group = cumsum(start)) split(df2, df2$group) 。然后可以在需要的任何地方简单地在xml布局文件中使用它。

这是自定义的TextInputLayout

TextInputLayout