如何更改未聚焦的textInputLayout的轮廓颜色或边框颜色?

时间:2018-08-28 13:28:28

标签: android colors styles android-textinputlayout

我正试图更改textInputLayout的轮廓颜色或边框颜色,我不知道为什么它没有改变,我搜索并找到了一些解决方案,但对我没有用。

在这里放置样式,然后将其应用到textInputLayout

<style name="WhiteOutlineBox" parent="Widget.MaterialComponents.TextInputLayout.OutlineBox">
    <item name="boxStrokeColor">@color/snow </item>
    <item name="hintTextAppearance">@style/TextLabel</item>
    <item name="android:textColorHint">@color/snow</item>
    <item name="passwordToggleTint">@color/snow</item>

    <item name="colorControlNormal">@color/snow</item>
    <item name="colorControlActivated">@color/snow</item>
    <item name="colorControlHighlight">@color/snow</item>
    <item name="colorPrimary">@color/snow</item>
    <item name="colorPrimaryDark">@color/snow</item>
    <item name="colorAccent">@color/snow</item>

</style>

<!--  this style for the hint text lable in textInputLayout -->
<style name="TextLabel" parent="TextAppearance.Design.Hint">
    <item name="android:textSize">12sp</item>
    <item name="android:textColor">@color/snow</item>
</style>

此处是在xml的textInputLayout中应用它的代码

<android.support.design.widget.TextInputLayout
            android:id="@+id/ed_oldPass"
            style="@style/WhiteOutlineBox"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="32dp"
            android:layout_marginEnd="32dp"
            android:layout_marginTop="50dp"
            app:passwordToggleEnabled="true">

            <android.support.design.widget.TextInputEditText
                style="@style/WhiteOutlineBox"
                android:layout_width="match_parent"
                android:layout_height="56dp"
                android:background="@color/snow"
                android:textColor="@color/snow"
                android:layout_marginBottom="10dp"
                android:hint="@string/old_pass_ed_hint"
                android:inputType="textPassword"
                android:paddingEnd="10dp"
                android:paddingStart="10dp" />
        </android.support.design.widget.TextInputLayout>

笔触颜色,hintTextAppearence,提示颜色和传递切换色调颜色已更改,但是其他人不可以,当边框未聚焦时我要更改边框的颜色怎么办?请帮助并提前感谢

3 个答案:

答案 0 :(得分:1)

将此添加到您的color.xml

<color name="mtrl_textinput_default_box_stroke_color">#BDC3C7</color>

它会覆盖默认的未聚焦轮廓颜色

答案 1 :(得分:0)

如果有人想以编程方式仅更改一个TextInputLayout,则会出现问题,问题是无法访问属性defaultStrokeColor,唯一的更改方法是通过覆盖颜色mtrl_textinput_default_box_stroke_color或使用state list colour,但在两种情况下,都需要XML上的样式。

另一方面,可以通过focusedStrokeColor访问属性setBoxStrokeColor,因此可以通过编程方式更改它而无需任何特殊代码。

一个解决方案,如果您可以选择反射,那么当然是在运行时更改属性的可访问性,以下代码将在Material-1.1.0上完成工作:

fun TextInputLayout.setDefaultStrokeColor(
    color: Int
) {
    try {
        val defaultStrokeColor = TextInputLayout::class.java.getDeclaredField("defaultStrokeColor")
        defaultStrokeColor.isAccessible = true
        defaultStrokeColor.set(this, color)
    } catch (e: NoSuchFieldException) {
        // failed to change the color
    }
}

将其用作extension function

yourView.setDefaultStrokeColor(yourColor)

答案 2 :(得分:0)

您可以使用 boxStrokeColor 属性。它可以与选择器一起使用。

使用类似的东西:

    <com.google.android.material.textfield.TextInputLayout
        app:boxStrokeColor="@color/text_input_layout_stroke_color"
        ..>

<style name="WhiteOutlineBox" parent="Widget.MaterialComponents.TextInputLayout.OutlineBox">
    <item name="boxStrokeColor">@color/text_input_layout_stroke_color</item>
</style>

具有:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:alpha="..." android:color="@color/...." android:state_focused="true"/>
  <item android:alpha="..." android:color="@color/...." android:state_hovered="true"/>
  <item android:alpha="..." android:color="@color/...." android:state_enabled="false"/>
  <item android:alpha="..." android:color="@color/...."/>  <!-- unfocused -->
</selector>

enter image description here
enter image description here
enter image description here