web-dev-qa-db-ja.com

TextInputLayoutヒントテキストの色とフローティングラベルの色をプログラムで設定

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

textField.setHintTextColor(Color.RED);

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

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

enter image description here

16

リフレクションでフォーカスカラーを変更しました。これは誰かに役立つスニペットです。

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();
    }
}

EDIT 2018-08-01:

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

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

17
alexandrius

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

メソッドがあります:

setHintTextAppearance(int resId)

これは、カラーリソースになる可能性のあるリソースIDを受け取ります!

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

お役に立てば幸いです!

4
Eenvincible

両方を変更する場合Focused ColorおよびDefault Text Color TextInputレイアウト用

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();
    }
}

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

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

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

これにより、EditTextに必要な下線が表示されます。

3
Naveen Kumar M

通常、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+で動作します

3
ViramP

これに関する私の経験を共有させてください。また、これに関連するすべての質問に記載されているすべてのソリューションを試しました。つまり子ウィジェットのヒントの色をTextInputLayoutに変更

この質問に対する答えを少し詳しく説明できることを嬉しく思います。

私たちが知る必要があるのは次のとおりです。

  1. TextInputLayoutまたはその子ウィジェットのスタイルに以下の行を追加しても、あまり役に立ちません。

    <item name = "Android:textColorHint"> @ color/white </ item>

    編集可能なウィジェットにフォーカスを受け取る/許可するたびにcolorAccentを使用するためです。

  2. この問題に対する実際の答えは、そのスタイル行をアプリケーションのスタイルタグに追加することです。これにより、そのスタイル行または編集可能な領域にフォーカスがないときにヒントの色が設定されます。 (それが私たちが毎回見逃しているポイントです)。

これに関する他の情報がある場合はお知らせください。

ありがとう!

0
Harpreet

Material Componentsライブラリ を使用すると、次を使用できます。

レイアウト内:

<com.google.Android.material.textfield.TextInputLayout
    app:hintTextColor="@color/mycolor"
    Android:textColorHint="@color/text_input_hint_selector"
    .../>

スタイル:

<style name="..." parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <!-- The color of the label when it is collapsed and the text field is active -->
    <item name="hintTextColor">?attr/colorPrimary</item>
    <!-- The color of the label in all other text field states (such as resting and disabled) -->
    <item name="Android:textColorHint">@color/mtrl_indicator_text_color</item>
</style>

コード内:

// Sets the text color used by the hint in both the collapsed and expanded states
textInputLayout.setDefaultHintTextColor(...);

//Sets the collapsed hint text color
textInputLayout.setHintTextColor(....);
0