2015-09-07 8 views
9

私は、EditText Viewを含む単純なTextInputLayoutを持っています。TextInputLayoutアクセントの色をプログラムで変更する

ここでは、プログラムで強調表示の色(下線、強調表示されたhintTextColor)を変更する方法を知りました。 TextInputLayout内で適切なメソッドが見つからないようです。

提案がありますか?前もって感謝します。

答えて

3

あなたはそれが機能ホープのEditText

Drawable background = InputTextLayout.getEditText().getBackground(); 
DrawableCompat.setTint(background, yourColor); 
InputTextLayout.getEditText().setBackground(background); 

の下部にあるラインの

InputTextLayout.getEditText().setHighlightColor(yourColor); 
InputTextLayout.getEditText().setHintTextColor(yourColor); 

と、この、テキストのためにこれを試すことができます!

+1

いいえ動作しません! – sud007

+2

@ sud007私もこれを試して、私は動作しないことを確認しました。あなたは私のために働いている私の解決策(この質問で私の答え)を試すことができます。 –

15

IMHO InputTextLayoutはスタイルで設定されているため、ラベルの色をプログラムによって変更することはできません。私はInputTextLayoutのソースコードを調べて、プライベート色のメンバーへのアクセスを作成し、このハックのヘルパーメソッドを書いた:

public static void setInputTextLayoutColor(EditText editText, @ColorInt int color) { 
    TextInputLayout til = (TextInputLayout) editText.getParent(); 
    try { 
     Field fDefaultTextColor = TextInputLayout.class.getDeclaredField("mDefaultTextColor"); 
     fDefaultTextColor.setAccessible(true); 
     fDefaultTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{ color })); 

     Field fFocusedTextColor = TextInputLayout.class.getDeclaredField("mFocusedTextColor"); 
     fFocusedTextColor.setAccessible(true); 
     fFocusedTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{ color })); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

mFocusedTextColorは、ラベルの色を設定します設定された内部CollapsingTextHelper.mCollapsedTextColorのために使用されています。

+0

それはうまく動作します! – sud007

+0

ありがとう..これは私たちの多くを助けます –

+1

私はソースを見て、彼らはスタイルと属性を使用しているので、あなたはそれをプログラム的に行うことはできません。この反射ベースのアプローチはあなたの最善の選択肢です。他のオプションは、クラスをコピーしてヘルパーメソッドを追加してプログラム的に色を設定することです。 – ashishduh

関連する問題