2

edittextのヒントカラーと異なるフォーカスになっていない場合、edittextのフローティングラベルのテキストカラーを設定する方法は?edittextのヒントカラーと異なるフォーカスになっていない場合、edittextのフローティングラベルのテキストカラーを設定するにはどうすればよいですか?

ヒントの色を最初に灰色に設定しました。ユーザーがedittextにフォーカスすると、赤に変わります。問題は、テキストを入力した後にedittextのフォーカスが削除され、edittextの浮動ラベルのテキストの色がgreyに変わります。エディットテキストにテキストが書き込まれていないときにのみヒントカラーにする必要があります。また、edittextにフォーカスがないときでも、フローティングラベルの色は常に赤色でなければなりません。以下は

私はあなただけのEditText

android:textColorHighlight="@android:color/white" 

またはあなたが色を変更したい場合は内部でこの属性を挿入することにより、浮動ヒントの色を変更することができusing-

<android.support.design.widget.TextInputLayout 
         android:id="@+id/amountLayout" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout" 
         android:paddingTop="@dimen/dp1"> 

         <android.support.design.widget.TextInputEditText 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:hint="@string/amount" 
          android:textColor="@color/red" 
          android:inputType="number"/> 

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

<style name="TextAppearance.App.TextInputLayout" parent="@android:style/TextAppearance"> 
     <item name="android:textColor">@color/red</item> 
     <item name="android:textSize">@dimen/sp8</item> 
    </style> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorControlNormal">@color/red</item> 
     <item name="colorControlActivated">@color/red</item> 
     <item name="colorControlHighlight">@color/red</item> 
    <item name="android:textColorHint">@color/grey</item> 
</style> 

答えて

1

午前のコードですeditText(浮動のものではない)あなたのテーマにこれを加えることができます

<item name="android:textColorHint">@android:color/white</item> 
+0

問題はのEditTextがあるときにfoatingを集中しないことがありますedittextのラベルのテキストの色がヒントの色に変わります。そして、私がandroid:textColorHintで指定した色に関係なく、フローティングのラベルの色はedittextにフォーカスがないと変更されます –

1

私もこのプロを持っていますblem、しかし私はそれを解決しました、これはあなたを助けるかもしれない私の解決策です。

をTextInputLayoutにのみ追加し、TextInputEditTextには追加しないでください。

android:textColorHint="@color/yourLabelColorWhenNotFocus" 

あなたはTextInputEditTextとTextInputLayoutの両方で、または単にTextInputEditTextでこの属性を設定した場合、それはうまく動作しません。

0

私はこれを行う方法を見つけることができなかった、と何TextInputLayoutあるプライベートメンバmDefaultTextColorを変更する方法がないためTextInputLayoutのソースを読んでから、これは、プログラムことはできませんが判明ビューのフォーカスが合っていないときにヒントの色を変更します。これを設定する唯一の方法は、XMLを介しです:私たちは、これを動的に設定することができるようにしたいので、明らかに十分ではありません

android:textColorHint="@color/red" 

私はのアクセッサを、一対の拡張機能を介して書いています。

/** 
* We need these accessors because this field is private and programmatically unstyleable, 
* and we want to change the default (both focused and unfocused) hint text color. 
* 
* This is made safe by simply defaulting to null at any point there could be a problem. 
*/ 
private fun TextInputLayout.getDefaultTextColor(): ColorStateList? { 
    javaClass.getDeclaredField("mDefaultTextColor").let { field -> 
     field.isAccessible = true 
     return field.get(this) as? ColorStateList? 
    } 
} 

private fun TextInputLayout.setDefaultTextColor(color: ColorStateList) { 
    javaClass.getDeclaredField("mDefaultTextColor").let { field -> 
     field.isAccessible = true 
     field.set(this, color) 
    } 
} 

使用法:

//Get the original color 
normalTextColor = text_input_layout.getDefaultTextColor() 

//Change the color to another color 
text_input_layout.setDefaultTextColor(ContextCompat.getColorStateList(context, R.color.red)) 
text_input_layout.setHintTextAppearance(R.style.TextAppearance_Error) 

//Change the color back to the default 
//(the TextInputLayout likes to use the inner TextInputEditText's hint color state list as a fallback, so we will too) 
text_input_layout.setDefaultTextColor(normalTextColor ?: inner_text.hintTextColors) 
text_input_layout.setHintTextAppearance(R.style.TextAppearance_Design_Hint) 

あなたは上記の文献に​​スタイルに気づくでしょう、その定義は単純です:

<style name="TextAppearance.Error" parent="TextAppearance.Design.Hint"> 
    <item name="android:textColor">@color/red</item> 
</style> 
関連する問題