34

我刚刚遇到一个我不知道如何解决的问题。它看起来很傻,但我找不到修复它的方法。

我在 android 中有一个带有多个 EditText 的表单,当您提交表单时,它会检查那些 EditText,如果它们有错误的数据,我将 EditText 更改为红色边框(应用九补丁图像)。

myEditText.setBackgroundResource(R.drawable.edittext_red);

问题是,当用户更改EditText时,我想恢复android的默认样式,但我不知道该怎么做。如果我做:

myEditText.setBackgroundResource(0);

它只会删除所有内容,这不是我想要的。

谢谢!

4

2 回答 2

63

首先,在使用自己的 Ninepatch 调用 setBackgroundResource 之前,先存储 EditText 的原始背景,如下所示:

Drawable originalDrawable = myEditText.getBackground();

然后,如果用户输入了错误的数据,你可以设置你的红色边框 Ninepatch:

myEditText.setBackgroundResource(R.drawable.edittext_red);

稍后,当您想要恢复 EditText 的外观时,请使用存储的可绘制对象:

myEditText.setBackgroundDrawable(originalDrawable);

或者,您可以像这样直接引用默认的 Android EditText 背景:

myEditText.setBackgroundResource(android.R.drawable.edit_text);

androiddrawables中,您可以看到不同的可绘制对象如何查找不同版本的 Android,并获取它们的资源标识符。此方法应适用于所有可绘制对象,而不仅仅是 EditText

这些(以及其他 android 资源)也可以在您自己的系统上的 android-sdk 文件夹中找到

<android-sdk 文件夹路径>/android-sdk/platforms/android-<API 级别>/data/res/

于 2011-08-02T12:46:45.127 回答
3

对于 Kotlin 的材料设计:

edit.apply {
    setBackgroundResource(androidx.appcompat.R.drawable.abc_edit_text_material)
}
于 2020-11-16T09:40:27.417 回答