19

入力フィールドが必須の場合は、ヒント テキストの色とフローティング ラベルの色をプログラムで設定したいと思います。TextInputLayout に移行する前に、次を使用してプログラムでヒント テキストの色を設定していました。

textField.setHintTextColor(Color.RED);

TextInputLayout のヒント テキストの色とフローティング ラベルの色をプログラムで設定する方法を教えてもらえますか。

添付のスクリーンショットでは、フォーカスされていないときはアドレス 1というヒント テキストを赤で表示し、フォーカスがある場合はフローティング ラベルのアドレス 1を赤で表示する必要があります。

ここに画像の説明を入力

4

8 に答える 8

21

反射でピントの合った色を変えてみました。これが誰かを助けるかもしれないスニペットです。

private void setUpperHintColor(int color) {
    try {
        Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor");
        field.setAccessible(true);
        int[][] states = new int[][]{
                new int[]{}
        };
        int[] colors = new int[]{
                color
        };
        ColorStateList myList = new ColorStateList(states, colors);
        field.set(textInputLayout, myList);

        Method method = textInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class);
        method.setAccessible(true);
        method.invoke(textInputLayout, true);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

編集 2018-08-01:

デザイン ライブラリ v28.0.0 以降を使用している場合、フィールドは から に変更されmDefaultTextColordefaultHintTextColorからmFocusedTextColorに変更されましたfocusedTextColor

他のフィールドの逆コンパイルされたクラスを確認してください。

于 2016-09-01T12:07:14.443 に答える
6

こちらのドキュメントをよくご覧ください: TextInputLayout メソッド

方法があります:

setHintTextAppearance(int resId)

これは、スタイル リソースである可能性のあるリソース ID を取ります!

私はこれを試してみて、それがどうなるか見てみたい!

お役に立てば幸いです。

于 2016-02-28T14:19:48.470 に答える
4

通常、TextInputLayout のヒント テキストの色は、アプリの colorAccent から取得されます。

ただし、変更したい場合は、そのためにスタイルを使用できます。

<android.support.design.widget.TextInputLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:theme="@style/TextLabel">
 </android.support.design.widget.TextInputLayout>

@スタイル

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

しかし、赤色を追加したい場合、エラー色で区別する方法は、基本標準誤差が赤色であることを意味します。

textField.setHintTextColor(Color.RED); TextInputLayout のヒント テキストの色とフローティング ラベルの色をプログラムで設定する方法を教えてもらえますか。

setHintTextColor は API 23 以降で機能します

于 2016-09-01T13:28:08.233 に答える
3

両方の変更Focused ColorDefault Text ColorTextInput レイアウトの場合

private void setInputTextLayoutColor(int color, TextInputLayout textInputLayout) {
    try {
        Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor");
        field.setAccessible(true);
        int[][] states = new int[][]{
                new int[]{}
        };
        int[] colors = new int[]{
                color
        };
        ColorStateList myList = new ColorStateList(states, colors);
        field.set(textInputLayout, myList);

        Field fDefaultTextColor = TextInputLayout.class.getDeclaredField("mDefaultTextColor");
        fDefaultTextColor.setAccessible(true);
        fDefaultTextColor.set(textInputLayout, myList);

        Method method = textInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class);
        method.setAccessible(true);
        method.invoke(textInputLayout, true);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

EDIT : AppCompactEditText の線の色を変更するには

backgroundTintListの(またはsupportBackgroundTintList) を、色合いを変更したい色のみを含むEditTextのインスタンスに設定する必要があります。ColorStateList下位互換性のある方法でこれを行う簡単な方法は、次のようになります。

ColorStateList colorStateList = ColorStateList.valueOf(color)
editText.setSupportBackgroundTintList(colorStateList)

これによりEditText、目的の下線の色が得られます。

于 2017-05-17T04:32:20.920 に答える
-5

次を使用して FloatingLabel を赤で取得できました

textInputLayout.setErrorEnabled(true);
textInputLayout.setError(" ");

ここに画像の説明を入力

于 2016-02-28T15:24:03.620 に答える