我在我的布局xml文件中创建一个EditText

但我想改变颜色线在EditText从Holo(例如)红色。 怎样才能做到呢?


当前回答

你也可以通过像这样对EditText的背景进行着色来快速更改EditText的下划线颜色:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />

其他回答

最好的方法是使用AppCompatEditText和应用命名空间的backgroundTint属性。即。

    <android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"      
    app:backgroundTint="YOUR COLOR"
    android:layout_height="wrap_content" />

当我们使用android:backgroundTint时,它只会在API21或以上工作,但app:backgroundTint适用于所有API级别的应用程序。

为该编辑文本使用android:background属性。将可绘制的文件夹图像传递给它。 例如,

android:background="@drawable/abc.png"

如果您有edittext的自定义类,则可以动态地执行此操作。

首先,你必须声明edittext的状态和颜色如下所示。

int[][] states = new int[][]{
                new int[]{-android.R.attr.state_focused}, // enabled
                new int[]{android.R.attr.state_focused}, // disabled
        };
        int[] colors = new int[]{
                secondaryColor,
                primaryColor,
        };

然后创建ColorStateList变量

ColorStateList myList = new ColorStateList(states, colors);

最后一步是将其分配给edittext。

editText.setBackgroundTintList(myList);

在这之后,你必须写焦点变化事件。

this.setOnFocusChangeListener(new OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(View view, boolean b) {
                        setUnderlineColor(selectionColor,deselectionColor);
                    }
                });

你可以在setUnderlineClor()方法中创建上述代码,

private void setUnderlineColor(int primaryColor, int secondaryColor) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        int[][] states = new int[][]{
                new int[]{-android.R.attr.state_focused}, // enabled
                new int[]{android.R.attr.state_focused}, // disabled
        };
        int[] colors = new int[]{
                secondaryColor,
                primaryColor,
        };
        ColorStateList myList = new ColorStateList(states, colors);
        setBackgroundTintList(myList);
    }
}

在XML布局中使用:

android:backgroundTint="@color/colorPrimary"

或者在Java代码中复制这个方法:

public void changeLineColorInEditText(EditText editText, int color) {
        editText.setBackgroundTintList(ColorStateList.valueOf(color));
    }

像这样使用它:

changeLineColorInEditText(editText, getResources().getColor(R.color.colorPrimary));

您可以通过编程方式更改EditText的颜色,只需使用以下代码行: