3

Есть ли способ настроить эти TextInputLayout свойства программным образом:Стиль TextInputLayout программно

  • textColorHint
  • colorAccent
  • colorControlNormal
  • colorControlActivated
  • textSelectHandle

Я знаю, как стилизовать их с помощью атрибутов темы, но проект, над которым я работаю, загружает информацию о цветах динамически, и насколько я понимаю, нет способа изменить значения тем/стиля во время выполнения.

+0

Вы можете найти ответ здесь: http://stackoverflow.com/questions/31722034/how- к изменению цвета, из-textinputlayouts-меток и-EditText-подчеркивание-а ndroid/31723120 # 31723120 – guisantogui

+1

Вопрос состоял в том, чтобы установить его программно. –

ответ

0

Я пишу textInputLayout реализации, который может установить любой цвет подчеркивания и ошибки и показать ошибку сверху.

enter image description here

enter image description here

enter image description here

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 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^