Lo que yo quiero hacer es cambiar el color de fondo (set custom dibujable) de una ventana de mensaje de error aparece después de usar setError() método.

Actualmente, se parece a esto:

Cambio de fondo de EditText del mensaje de error

Me he encontrado con que Android tiene dos archivos:

  • popup_inline_error.9.png
  • popup_inline_above_error.9.png

Y se supone que tienes que ser capaz de establecer usando dos atributos:

  • errorMessageBackground
  • errorMessageAboveBackground

Pero cuando intento configurar en mi tema, todo lo que me sale es:

<item name="errorMessageBackground">@drawable/popup_inline_error_holo_light</item>
<item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_light</item>

error: Error: No resource found that matches the given name: attr 'errorMessageBackground'.

(es el mismo with android:errorMessageBackground)

Me voy a poner esta pregunta aquí, porque me he quedado sin ideas – tal vez alguien ya pudo hacerlo?

EDICIÓN:
Encabezado del Tema que estoy usando:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style
        name="Theme.MyThemeName"
        parent="@style/Theme.Sherlock.Light">

OTRA EDICIÓN:
Uh, me he encontrado con que mi pregunta es un duplicado de:
android:errorMessageBackground de no obtener los recursos se encuentra el error en styles.xml

OTRA EDICIÓN:
Este es un problema conocido, echa un vistazo a este enlace: https://code.google.com/p/android/issues/detail?id=55879

  • Has echado un vistazo a esta pregunta?
  • Yo lo hice, en realidad – pero quiero cambiar el color de la burbuja, no el color del texto (de la cual soy capaz de cambiar). Me he dado cuenta de que Chris logró cambiar el fondo – no tengo idea de cómo.
  • Parece que errorMessageBackground es un nuevo atributo introducido en Android API de nivel 19. Tienen que tratar de poner a su estilo en values-v19 carpeta?
  • ¿Has conseguido solucionarlo? Por favor responder a su pregunta. Que podría ayudar a muchos.
  • Lo siento, no me he decidido a escribir mi propio error de sistema de visualización de entonces. Pero ¿por qué no probar y echar un vistazo a este proyecto: github.com/sherifelkhatib/WidgyWidgets
  • El problema original, citado en la pregunta anterior edición, fue erróneamente marcado como obsoleto. Tengo reabierto el tema. No sé de ninguna solución, otros que no uso setError() y hacer algo más.
  • Revise este enlace stackoverflow.com/questions/14413575/…

InformationsquelleAutor scana | 2013-01-02

4 Comentarios

  1. 6

    Yo sugeriría usar @Codeversed solución, pero si no se ajusta para usted, por alguna razón, usted puede usar mi costumbre EditText aplicación.

    Habitual EditText representación:
    Cambio de fondo de EditText del mensaje de error

    EditText con el error:
    Cambio de fondo de EditText del mensaje de error

    En pocas palabras: he creado xml personalizado del estado de error de la pantalla. Ver el código relacionado a continuación:

    InputEditText.java:

    import android.annotation.TargetApi;
    import android.content.Context;
    import android.graphics.drawable.Drawable;
    import android.os.Build;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.AttributeSet;
    import android.widget.EditText;
    import com.example.oleksandr.inputedittext.R;
    /**
    * Input EditText which allows define custom drawable for error state
    */
    public class InputEditText extends EditText {
    private static final int[] STATE_ERROR = {R.attr.state_error};
    private boolean mIsError = false;
    public InputEditText(Context context) {
    this(context, null, 0);
    init();
    }
    public InputEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
    }
    public InputEditText(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public InputEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    init();
    }
    private void init() {
    addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    //empty
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    setError(null);
    }
    @Override
    public void afterTextChanged(Editable s) {
    //empty
    }
    });
    }
    @Override
    public void setError(CharSequence error) {
    mIsError = error != null;
    super.setError(error);
    refreshDrawableState();
    }
    @Override
    public void setError(CharSequence error, Drawable icon) {
    mIsError = error != null;
    super.setError(error, icon);
    refreshDrawableState();
    }
    @Override
    protected int[] onCreateDrawableState(int extraSpace) {
    final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
    if (mIsError) {
    mergeDrawableStates(drawableState, STATE_ERROR);
    }
    return drawableState;
    }
    }

    drawable/edittext_bg_error.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape
    android:id="@+id/listview_background_shape"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <stroke
    android:width="2dp"
    android:color="#f00"
    />
    <padding
    android:bottom="2dp"
    android:left="2dp"
    android:right="2dp"
    android:top="2dp"
    />
    <corners android:radius="5dp"/>
    <solid android:color="#ffffffff"/>
    </shape>

    drawable/edittext_bg_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!-- custom error state drawable -->
    <item android:drawable="@drawable/edittext_bg_error" app:state_error="true"/>
    <!-- Do whatever you want for all other states -->
    <item android:drawable="@android:drawable/editbox_background_normal"/>
    </selector>

    añadir a su attrs.xml

    <attr name="errorColor" format="reference"/>

    y styleables.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <declare-styleable name="error">
    <attr name="state_error" format="boolean"/>
    </declare-styleable>
    </resources>

    y su uso es realmente simple:

    <com.example.oleksandr.inputedittext.views.InputEditText
    android:id="@id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/edittext_bg_selector"
    android:inputType="text"
    android:text="@string/hello_world"
    />

    [EDITAR]:

    Acabo de dar cuenta, que la respuesta original era sobre el cambio emergente de error de color, pero no EditText color de fondo. De todos modos, espero que esto pueda ayudar a alguien.

    • yo estaba buscando algo como este enfoque. gracias
  2. 5

    tendrá que incluir estas dependencias:

    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'

    y aquí se muestra un ejemplo de cómo utilizarlo:

    <android.support.design.widget.TextInputLayout
    android:id="@+id/input_layout_password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
    android:id="@+id/input_password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_email" />
    </android.support.design.widget.TextInputLayout>

    Esto le dará a usted en el Diseño de Materiales que usted está buscando para darle a la validación del formulario, así como un agradable efecto de animación para la etiqueta.

    Cambio de fondo de EditText del mensaje de error

  3. -1
    private EditText adTitle;
    //....
    adTitle.setError(Html.fromHtml("<font color='red'>hello</font>"));
    • Lo que quiero es cambiar EditText de fondo, no el color de la fuente en sí – por favor lea la pregunta detenidamente antes de contestar.
    • Fue muy útil para mí…!!! gracias..!!!
    • Esto no responde a la pregunta.
    • que podría resolver el problema para muchos
  4. -2

    Puede utilizar este método sólo tiene que pasar msj de texto,su edittext id

     public static void setErrorMsg(String msg,EditText viewId)
    {
    //Osama ibrahim 10/5/2013
    int ecolor = Color.WHITE; //whatever color you want
    String estring = msg;
    ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor);
    SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring);
    ssbuilder.setSpan(fgcspan, 0, estring.length(), 0);
    viewId.setError(ssbuilder);
    }
    • Lo siento, eso no es lo que yo quería – he tenido que cambiar todo el fondo, para que se vea el mismo mensaje de error de ICS.

Dejar respuesta

Please enter your comment!
Please enter your name here