Programaticamente, você pode usar:
/* Here you get int representation of an HTML color resources */
int yourColorWhenEnabled = ContextCompat.getColor(getContext(), R.color.your_color_enabled);
int yourColorWhenDisabled = ContextCompat.getColor(getContext(), R.color.your_color_disabled);
/* Here you get matrix of states, I suppose it is a matrix because using a matrix you can set the same color (you have an array of colors) for different states in the same array */
int[][] states = new int[][]{new int[]{android.R.attr.state_enabled}, new int[]{-android.R.attr.state_enabled}};
/* You pass a ColorStateList instance to "setDefaultHintTextColor" method, remember that you have a matrix for the states of the view and an array for the colors. So the color in position "colors[0x0]" will be used for every states inside the array in the same position inside the matrix "states", so in the array "states[0x0]". So you have "colors[pos] -> states[pos]", or "colors[pos] -> color used for every states inside the array of view states -> states[pos] */
myTextInputLayout.setDefaultHintTextColor(new ColorStateList(states, new int[]{yourColorWhenEnabled, yourColorWhenDisabled})
Explicação:
Obtenha o valor da cor int a partir de um recurso de cores (uma maneira de apresentar as cores RGB usadas pelo Android). Eu escrevi ColorEnabled, mas realmente deveria ser, para esta resposta, ColorHintExpanded & ColorViewCollapsed. De qualquer forma, essa é a cor que você verá quando a dica de uma exibição "TextInputLayout" estiver no estado Expandido ou Recolhido; você o definirá usando a próxima matriz na função "setDefaultHintTextColor" da exibição. Referência:
Referência para TextInputLayout - procure nesta página o método "setDefaultHintTextColor" para obter mais informações
Observando os documentos acima, você pode ver que as funções definem as cores da dica Expandida e Reduzida usando um ColorStateList.
Documentos do ColorStateList
Para criar o ColorStateList, primeiro criei uma matriz com os estados que eu quero, no meu caso state_enabled & state_disabled (cujos são, em TextInputLayout, é igual a Hint Expanded e Hint Collapsed apenas fazendo um teste]). Depois passo para o construtor do ColorStateList as matrizes com valores int dos recursos de cores, essas cores têm correspondências com a matriz de estados (cada elemento na matriz de cores corresponde à matriz respectiva na matriz de estados na mesma posição). Portanto, o primeiro elemento da matriz de cores será usado como cor para todos os estados da primeira matriz da matriz de estados (no nosso caso, a matriz possui apenas 1 elemento: estado habilitado = estado expandido da dica para TextInputLayut). As últimas coisas que os estados têm valores positivos / negativos e você tem apenas os valores positivos,
Espero que isso seja útil. Tchau, tenha uma boa codificação (: