Is there a way to customize these TextInputLayout properties programmatically:
I know how to style them using theme attributes, but the project I'm working on loads color information dynamically, and as far as I understand there is no way of changing theme/style values at runtime.
I write textInputLayout implemention, that can set any color of underline and error and show error on top.
public class TextInputLayoutUseful extends TextInputLayout {
private CharSequence originalHint = "";
public TextInputLayoutUseful(Context context) {
super(context);
init();
}
public TextInputLayoutUseful(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TextInputLayoutUseful(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
this.originalHint = getHint();
setErrorEnabled(false);
}
/**
* - put error text into top floating label
* - colorized layout
*
* @param error error text
*/
@Override
public void setError(@Nullable CharSequence error) {
if (error == null) {
setHint(originalHint);
setHintTextAppearance(R.style.InputLayoutNormalHint);
setUnderlineColor(R.color.input_normal_accent);
} else {
setHint(error);
setHintTextAppearance(R.style.InputLayoutErrorHint);
setUnderlineColor(R.color.input_error_accent);
}
}
/**
* colorized layout specified green color
*
* @param acceptedHint text for floating label
*/
public void setGreenError(@NonNull CharSequence acceptedHint) {
setHint(acceptedHint);
setHintTextAppearance(R.style.InputLayoutAcceptedHint);
setUnderlineColor(R.color.input_accepted_accent);
}
private void setUnderlineColor(@ColorRes int colorRes) {
if (getEditText() != null) {
getEditText().getBackground().mutate().setColorFilter(ContextCompat.getColor(getContext(), colorRes), PorterDuff.Mode.SRC_ATOP);
}
}
}
style
<style name="InputLayoutErrorHint" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/input_error_accent</item>
</style>
<style name="InputLayoutNormalHint" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/input_normal_accent</item>
</style>
<style name="InputLayoutAcceptedHint" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/input_accepted_accent</item>
</style>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.