Estoy usando la biblioteca de diseño de Android TextinputLayout. Pero no se pudo personalizar el color de la sugerencia, el color de la etiqueta y el color del subrayado del EditTextinterior TextinputLayout. Por favor ayuda.
Estoy usando la biblioteca de diseño de Android TextinputLayout. Pero no se pudo personalizar el color de la sugerencia, el color de la etiqueta y el color del subrayado del EditTextinterior TextinputLayout. Por favor ayuda.
Respuestas:
<item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>
Para obtener más información, consulte este hilo .
<style name="MyHintStyle" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/main_color</item>
</style>
y utilícelo así:
<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle">
<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle"
android:textColorHint="#c1c2c4">
Gracias a @AlbAtNf
android:textColorHintque TextInputLayouten XML.
Basado en Fedor Kazakov y otras respuestas, creé una configuración predeterminada.
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="Widget.Design.TextInputLayout" parent="AppTheme">
<item name="hintTextAppearance">@style/AppTheme.TextFloatLabelAppearance</item>
<item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
<item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
<item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
</style>
<style name="AppTheme.TextFloatLabelAppearance" parent="TextAppearance.Design.Hint">
<!-- Floating label appearance here -->
<item name="android:textColor">@color/colorAccent</item>
<item name="android:textSize">20sp</item>
</style>
<style name="AppTheme.TextErrorAppearance" parent="TextAppearance.Design.Error">
<!-- Error message appearance here -->
<item name="android:textColor">#ff0000</item>
<item name="android:textSize">20sp</item>
</style>
</resources>
activity_layout.xml
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Text hint here"
android:text="5,2" />
</android.support.design.widget.TextInputLayout>
Centrado:
Sin foco:
Mensaje de error:
Con la biblioteca de componentes de materiales puede utilizar lacom.google.android.material.textfield.TextInputLayout .
Puede aplicar un estilo personalizado para cambiar los colores.
Para cambiar el color de la pista , debe utilizar estos atributos:
hintTextColory android:textColorHint.
<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
<!-- The color of the label when it is collapsed and the text field is active -->
<item name="hintTextColor">?attr/colorPrimary</item>
<!-- The color of the label in all other text field states (such as resting and disabled) -->
<item name="android:textColorHint">@color/selector_hint_text_color</item>
</style>
Debería utilizar un selector para android:textColorHint. Algo como:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
<item android:alpha="0.6" android:color="?attr/colorOnSurface"/>
</selector>
Para cambiar el color de fondo que usted tiene que utilizar el atributo: boxStrokeColor.
<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
....
<item name="boxStrokeColor">@color/selector_stroke_color</item>
</style>
También en este caso debería utilizar un selector. Algo como:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorPrimary" android:state_focused="true"/>
<item android:alpha="0.87" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>
También puede aplicar estos atributos en su diseño:
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
app:boxStrokeColor="@color/selector_stroke_color"
app:hintTextColor="?attr/colorPrimary"
android:textColorHint="@color/selector_hint_text_color"
...>
boxStrokeColor. En el ejemplo, selector_stroke_coloren particular, la última línea:<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
Agregue este atributo en la etiqueta Edittext y disfrute:
android:backgroundTint="@color/colorWhite"
Esta publicación de blog describe varios aspectos de estilo EditTexty AutoCompleteTextViewenvueltos por TextInputLayout.
Por EditTexty AppCompat lib 22.1.0+ se puede establecer el atributo de tema con algunos ajustes relacionados con el tema:
<style name="StyledTilEditTextTheme">
<item name="android:imeOptions">actionNext</item>
<item name="android:singleLine">true</item>
<item name="colorControlNormal">@color/greyLight</item>
<item name="colorControlActivated">@color/blue</item>
<item name="android:textColorPrimary">@color/blue</item>
<item name="android:textSize">@dimen/styledtil_edit_text_size</item>
</style>
<style name="StyledTilEditText">
<item name="android:theme">@style/StyledTilEditTextTheme</item>
<item name="android:paddingTop">4dp</item>
</style>
y aplicarlos en EditText:
<EditText
android:id="@+id/etEditText"
style="@style/StyledTilEditText"
Porque las AutoCompleteTextViewcosas son más complicadas porque envolverlo TextInputLayouty aplicar este tema rompe el comportamiento de la etiqueta flotante. Necesitas arreglar esto en el código:
private void setStyleForTextForAutoComplete(int color) {
Drawable wrappedDrawable = DrawableCompat.wrap(autoCompleteTextView.getBackground());
DrawableCompat.setTint(wrappedDrawable, color);
autoCompleteTextView.setBackgroundDrawable(wrappedDrawable);
}
y en Activity.onCreate:
setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
autoCompleteTextView.setOnFocusChangeListener((v, hasFocus) -> {
if(hasFocus) {
setStyleForTextForAutoComplete(getResources().getColor(R.color.blue));
} else {
if(autoCompleteTextView.getText().length() == 0) {
setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
}
}
});
Si desea cambiar el color de la barra / línea y el color del texto de la sugerenciaTextInputLayout (cuál es normalmente el color de acento), simplemente cree este estilo:
<style name="MyStyle">
<item name="colorAccent">@color/your_color</item>
</style>
Luego aplícalo a tu TextInputLayoutcomo tema :
<android.support.design.widget.TextInputLayout
...
app:theme="@style/MyStyle" />
Básicamente, esto establece un tema (no estilo) en una vista (a diferencia de toda la actividad).
<style name="Widget.Design.TextInputLayout" parent="android:Widget">
<item name="hintTextAppearance">@style/TextAppearance.Design.Hint</item>
<item name="errorTextAppearance">@style/TextAppearance.Design.Error</item>
</style>
Puede anular este estilo para el diseño
Y también puede cambiar el estilo interno del elemento EditText.
<style name="EditScreenTextInputLayoutStyle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorControlNormal">@color/actionBar_background</item>
<item name="colorControlActivated">@color/actionBar_background</item>
<item name="colorControlHighlight">@color/actionBar_background</item>
<item name="colorAccent">@color/actionBar_background</item>
<item name="android:textColorHint">@color/actionBar_background</item>
</style>
aplicar este estilo a TextInputLayout
android:theme="@style/EditScreenTextInputLayoutStyle"
A TextinputLayoutno es una vista, sino a Layout, como muy bien lo describe Dimitrios Tsigouris en su publicación de blog aquí . Por lo tanto, no necesita un Style, que es Viewssolo para , pero use un Theme. Después de la publicación del blog, terminé con la siguiente solución:
Empiece en su styles.xmlcon
<style name="TextInputLayoutAppearance" parent="Widget.Design.TextInputLayout">
<!-- reference our hint & error styles -->
<item name="android:textColor">@color/your_colour_here</item>
<item name="android:textColorHint">@color/your_colour_here</item>
<item name="colorControlNormal">@color/your_colour_here</item>
<item name="colorControlActivated">@color/your_colour_here</item>
<item name="colorControlHighlight">@color/your_colour_here</item>
</style>
Y en tu diseño agrega
<com.google.android.material.textfield.TextInputLayout
android:theme="@style/TextInputLayoutAppearance"
...