以编程方式更改TextInputLayout轮廓框的颜色

时间:2019-07-14 13:55:15

标签: android android-layout android-edittext android-view android-textinputlayout

我想以编程方式更改TextInputLayout的轮廓,但是我似乎无法使其正常工作。可以通过XML(question by other SO user using XML)进行选择,但是对我来说这是不可用的,因为我需要进行动态着色。我目前有以下布局:

<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
    android:id="@+id/color_outline"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/color"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Choose color"/>

</com.google.android.material.textfield.TextInputLayout>

我试图通过查看TextInputLayout的各种box方法来应用着色,但是没有任何效果。

internal fun String.toIntColor() = Integer.parseInt(this.replaceFirst("#", ""), 16)


val colorOutline: TextInputLayout = view.findViewById(R.id.color_outline)
colorOutline.boxStrokeColor = "#006699".toIntColor()

如何动态着色,如下图所示?

当前情况:
enter image description here

期望的情况:(已购买照片)
enter image description here

Similar question, but focussing on XML

1 个答案:

答案 0 :(得分:3)

您可以使用方法 setBoxStrokeColorStateList

类似的东西:

//Color from rgb
int color = Color.rgb(255,0,0);
//Color from hex string
int color2 = Color.parseColor("#FF11AA");

int[][] states = new int[][] {
        new int[] { android.R.attr.state_focused}, // focused
        new int[] { android.R.attr.state_hovered}, // hovered
        new int[] { android.R.attr.state_enabled}, // enabled
        new int[] { }  // 
    };

    int[] colors = new int[] {
        color,
        color,
        color,
        color2
    };

    ColorStateList myColorList = new ColorStateList(states, colors);
    textInputLayout.setBoxStrokeColorStateList(myColorList);

enter image description here