私は完全なUIのカスタマイズを行っているアプリを開発中です。 EditText
がTextInputLayout
にラップされている場合、EditText
のデフォルトのテキストヒントカラーとラインカラーは、スタイルで定義されているtextPrimaryColor
と同じです。ただし、EditText
がフォーカスを受け取ると、その行はスタイルで定義されたaccent
の色になり、ヒントは浮動ヒントアニメーションを通り、accent
の色に変わります。 styles.xml
とthemes.xml
とするのはかなり簡単ですが、私はそれをプログラム的に得ることはできません。Android TextInputLayoutスタイリング(プログラム)
私が設定している現在の方法はこれです:
public static void setInputTextLayoutColor(final int accent, final int text, TextInputLayout textInputLayout, AppCompatEditText edit) {
edit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
AppCompatEditText editText = (AppCompatEditText) v;
editText.getBackground().clearColorFilter();
if(hasFocus) editText.getBackground().setColorFilter(accent, PorterDuff.Mode.SRC_IN);
else editText.getBackground().setColorFilter(text, PorterDuff.Mode.SRC_IN);
}
});
setCursorColor(edit, accent);
try {
Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor");
field.setAccessible(true);
int[][] states = new int[][]{
new int[]{}
};
int[] colors = new int[]{
accent
};
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();
}
}
この方法の問題は、ヒントテキストがアクセントカラーにすぐに着色されているA)、それがアクセントときに着色していないということですフォーカスを受け取ったB)EditText
行は正しい色で始まりますが、フォーカスを受け取ると、プログラムで設定された色ではなく、スタイルで定義されたaccent
に色付けされます。
これは焦点を当てていない画像です(「イベント名」フィールドを参照)。ここで、「イベント名」の色はグレー/ホワイト(テキストのように)である必要があります。
これはフォーカスされた画像です。ここではすべてが線の色以外は緑です。うまく
は、任意の助けいただければ幸いです