void ApplyTheme() { if (_textInputLayout == null) return; // set text color var textColor = MaterialColors.GetEntryTextColor(Element.TextColor); UpdateTextColor(Color.FromUint((uint)textColor.ToArgb())); var placeHolderColors = MaterialColors.GetPlaceHolderColor(Element.PlaceholderColor, Element.TextColor); var underlineColors = MaterialColors.GetUnderlineColor(Element.TextColor); var colors = MaterialColors.CreateEntryUnderlineColors(underlineColors.FocusedColor, underlineColors.UnFocusedColor); ViewCompat.SetBackgroundTintList(_textInputEditText, colors); if (HasFocus || !string.IsNullOrWhiteSpace(_textInputEditText.Text)) _textInputLayout.DefaultHintTextColor = MaterialColors.CreateEntryFilledPlaceholderColors(placeHolderColors.FloatingColor, placeHolderColors.FloatingColor); else _textInputLayout.DefaultHintTextColor = MaterialColors.CreateEntryFilledPlaceholderColors(placeHolderColors.InlineColor, placeHolderColors.FloatingColor); }
void ResetTextColors(Color formsTextColor, Color formsPlaceHolderColor) { _formsPlaceholderColor = formsPlaceHolderColor; _formsTextColor = formsTextColor; var underlineColors = MaterialColors.GetUnderlineColor(_formsTextColor); var placeHolderColors = MaterialColors.GetPlaceHolderColor(_formsPlaceholderColor, _formsTextColor); // I realize these are the same but I have to set it to a difference instance // otherwise when focused it won't change to the color I want it to and it'll just think // I'm not actually changing anything _unfocusedUnderlineColorsList = MaterialColors.CreateEntryUnderlineColors(underlineColors.FocusedColor, underlineColors.UnFocusedColor); _focusedUnderlineColorsList = MaterialColors.CreateEntryUnderlineColors(underlineColors.FocusedColor, underlineColors.UnFocusedColor); _focusedFilledColorList = MaterialColors.CreateEntryFilledPlaceholderColors(placeHolderColors.FloatingColor, placeHolderColors.FloatingColor); _unfocusedEmptyColorList = MaterialColors.CreateEntryFilledPlaceholderColors(placeHolderColors.InlineColor, placeHolderColors.FloatingColor); var textColor = MaterialColors.GetEntryTextColor(formsTextColor).ToArgb(); EditText.SetTextColor(new ColorStateList(s_colorStates, new[] { textColor, textColor })); }