如何改变颜色的 TextinputLayout 的标签和编辑文本下划线安卓

我使用的是机器人设计库的 TextinputLayout。但无法定制 TextinputLayoutEditText的提示颜色、标签颜色和下划线颜色。请帮帮我。

184342 次浏览
<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>

您可以为布局重写此样式

也可以更改内部 EditText 项的样式。

改变底线颜色:

来自 这个答案

 <item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>

浮动时更改提示颜色

<style name="MyHintStyle" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/main_color</item>
</style>

像这样使用它:

<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle">

不是浮动标签时更改提示颜色:

<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle"
android:textColorHint="#c1c2c4">

多亏了 @ AlbAtNf

这个 博客文章描述了 EditTextAutoCompleteTextViewTextInputLayout包装的各种造型方面。

对于 EditTextAppCompat lib 22.1.0 + ,您可以使用一些与主题相关的设置来设置主题属性:

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

并在 EditText上应用它们:

<EditText
android:id="@+id/etEditText"
style="@style/StyledTilEditText"

对于 AutoCompleteTextView,事情更加复杂,因为将它包装在 TextInputLayout中并应用此主题会打破浮动标签行为。 您需要用代码修复这个问题:

private void setStyleForTextForAutoComplete(int color) {
Drawable wrappedDrawable =     DrawableCompat.wrap(autoCompleteTextView.getBackground());
DrawableCompat.setTint(wrappedDrawable, color);
autoCompleteTextView.setBackgroundDrawable(wrappedDrawable);
}

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));
}
}
});
<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>

将此样式应用于 TextInputLayout

根据 Fedor Kazakov和其他答案,我创建了一个默认配置。

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 _ lay.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>

专注:

Focused

没有焦点:

Without focus

错误信息:

enter image description here

如果你想改变 TextInputLayout条形/线条颜色和提示文本颜色(通常的重点颜色) ,只需创建这样的样式:

<style name="MyStyle">
<item name="colorAccent">@color/your_color</item>
</style>

然后把它作为 主题应用到你的 TextInputLayout上:

<android.support.design.widget.TextInputLayout
...
app:theme="@style/MyStyle" />

这基本上是将一个 主题(而不是样式)设置为一个视图(与整个活动相反)。

在 Edittext 标记中添加这个属性,然后欣赏:

 android:backgroundTint="@color/colorWhite"

TextinputLayout不是视图,而是 Layout他的博客在这里中的 Dimitrios Tsigouris非常好地描述了这一点。因此,您不需要 Style,它仅用于 Views,而是使用 Theme。看完这篇博客后,我最终得出了以下解决方案:

styles.xml开始

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

并在您的布局添加

<com.google.android.material.textfield.TextInputLayout
android:theme="@style/TextInputLayoutAppearance"
...

使用 材料组件库你可以使用 强 > com.google.android.material.textfield.TextInputLayout

您可以应用自定义样式来更改颜色。

要更改提示颜色 ,您必须使用以下属性:
hintTextColor 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>

你应该为 android:textColorHint使用一个选择器,比如:

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

要更改底线颜色 ,必须使用属性: boxStrokeColor

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
....
<item name="boxStrokeColor">@color/selector_stroke_color</item>
</style>

在这种情况下,你也应该使用一个选择器,比如:

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

enter image description hereenter image description here

你也可以在你的布局中应用这些属性:

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

我用了上面所有的答案,没有一个有用。这个答案适用于 空气污染指数21 + 。当文本字段被聚焦时使用 应用程序: hintTextColor属性,当处于其他状态时使用 App: textColorHint 应用程序: textColorHint属性。要更改底线颜色,请使用这个属性 应用程序: boxStrokeColor,如下所示:

<com.google.android.material.textfield.TextInputLayout
app:boxStrokeColor="@color/colorAccent"
app:hintTextColor="@color/colorAccent"
android:textColorHint="@android:color/darker_gray"
    

<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>

它对 自动完成文本视图也适用。希望对你也适用:)

我没问题。如果您尝试使用 Label 编辑文本,并尝试更改颜色以加下划线,请使用。更改为 TextInputEditText 而不是 EditText。

           <com.google.android.material.textfield.TextInputLayout
android:id="@+id/editTextTextPersonName3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginLeft="@dimen/_16sdp"
android:layout_marginTop="@dimen/_16sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:layout_marginRight="@dimen/_8sdp"
android:textColorHint="@color/white"
app:layout_constraintEnd_toStartOf="@+id/guideline3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">


<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="@color/white"
android:hint="Lastname"
android:textSize="@dimen/_14sdp"
android:inputType="textPersonName"
android:textColor="@color/white"
android:textColorHint="@color/white" />
</com.google.android.material.textfield.TextInputLayout>

更改 TextInputLayout + TextInputEditText 的行颜色

Xml

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">@color/lineColor</color>

Xml

<style name="TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox.Dense">
<item name="boxStrokeColor">@color/lineColor</item>
<item name="android:textColorHint">@color/hintColor</item>
<item name="boxStrokeWidth">1dp</item>
<item name="boxBackgroundColor">@color/backgroundColor</item>
</style>


<style name="TextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText.FilledBox.Dense">
<item name="android:textColor">@color/black</item>
</style>

Xml

<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayout"
android:layout_height="wrap_content"
android:layout_width="match_parent">


<com.google.android.material.textfield.TextInputEditText
style="@style/TextInputEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>

可以使用 TextInputLayout中的 app:hintTextAppearance属性更改 TextInputLayout标签颜色

<android.support.design.widget.TextInputLayout
android:id="@+id/inputlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout">


<EditText
android:id="@+id/mail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:hint="@string/email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:paddingStart="5dp"
android:singleLine="true"/>


</android.support.design.widget.TextInputLayout>

风格 :

 <style name="TextAppearance.App.TextInputLayout"
parent="@android:style/TextAppearance">
<item name="android:textColor">@android:color/black</item>
<item name="android:textSize">20sp</item>
</style>

要更改 edittext下划线颜色,可以使用 android:backgroundTint

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Underline color change"
android:backgroundTint="@android:color/holo_red_light" />

我需要改变 TextInputEditText 在 TextInputLayout 中的底线颜色,然后其他的答案都不起作用。我最终通过设置 TextInputLayouts 主题的 color OnSurface 解决了这个问题。我把我的代码留在这里,以防它能帮到别人。

XML:

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme=""@style/TextInputLayoutStyle"">


<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"/>


</com.google.android.material.te`tfield.TextInputLayout>

风格:

<style name="TextInputLayoutStyle">
<item name="colorOnSurface">#0ff</item>
</style>

创建下面提到的样式

<style name="text_input_layout_style">
<item name="colorControlNormal">@color/primary</item>
<item name="colorControlActivated">@color/primary</item>
<item name="colorControlHighlight">@color/primary</item>
</style>

并应用到你的 TextInputLayout作为 android:theme="@style/text_input_layout_style"

而且绝对会为你们所有人工作。

XML

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/activity_profile_textInputLayout_mobile"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:hint="Mobile Number"
app:theme="@style/EditBoxColor">


<com.google.android.material.textfield.TextInputEditText
android:id="@+id/activity_profile_textInputEditText_mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
android:inputType="number"
android:maxLength="10"
android:textSize="15sp" />
</com.google.android.material.textfield.TextInputLayout>

风格

<style name="EditBoxColor" parent="ShapeAppearance.MaterialComponents.SmallComponent">
<item name="colorPrimary">@color/colorPurple</item>
<item name="colorPrimaryDark">@color/colorPurple3</item>
</style>