2012-01-24 15 views
24

Voglio avere qualche convalida per il mio EditText in cui voglio mostrare l'icona "enter image description here" (che viene quando si inserisce editText.setError("blah blah")) ma non si vuole che il testo nella finestra popup mostri che "bla bla".EditText setError() con icona ma senza messaggio Popup

esiste un modo per farlo? un modo è quello di creare un layout personalizzato che mostrerà l'icona immagine nel EditText. Ma esiste una soluzione migliore?

risposta

34

Problema risolto dopo un sacco di ricerche e permutazioni- (Anche grazie a @van)

Creare una nuova classe che estenderà EditText qualcosa come questo-

public class MyEditText extends EditText { 

public MyEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public void setError(CharSequence error, Drawable icon) { 
    setCompoundDrawables(null, null, icon, null); 
} 
} 

Utilizzare questa classe come una visione in XML come questo-

<com.raj.poc.MyEditText 
    android:id="@+id/et_test" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

Ora, nella terza fase, è sufficiente impostare un TextWatcher al testo personalizzato vista come questo-

et = (MyEditText) findViewById(R.id.et_test); 

    errorIcon = getResources().getDrawable(R.drawable.ic_error); 
    errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight())); 
     et.setError(null,errorIcon); 

    et.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      if(s.toString().length()>6){ 
       et.setError("", null); 
      }else{ 
       et.setError("", errorIcon); 
      } 
     } 
    }); 

dove R.drawable.ic_error =

Mantenere il testo null risolve il problema Ma se manteniamo solo null in setError (null), questo non mostrerà l'errore di validazione; dovrebbe essere nullo insieme al secondo param.

+2

In questo modo l'icona non scompare quando il testo viene modificato. – Vincent

+1

sì l'icona non scompare quando viene inserito il testo corretto –

+0

@Vincent: Si prega di provare la risposta aggiornata. Funziona anche su 4.2 e risolve il tuo problema. Grazie comunque. – Rajkiran

4

Scusa Rajkiran, ma la tua soluzione non funziona su Android 4.2 versione. Se sto cercando di impostare il valore null per errore, non viene nemmeno visualizzato. La soluzione che ho trovato è stata quella di estendere EditText e sovrascrivere il metodo setError. No, ho solo un indicatore di errore senza popup.

@Override 
public void setError(CharSequence pError, Drawable pIcon) { 
    setCompoundDrawables(null, null, pIcon, null); 
} 
+0

Ohh. Mi dispiace sentirti. La tua soluzione ha funzionato? – Rajkiran

+0

Sì. Perché ho affrontato lo stesso problema di te e quella è stata la prima soluzione che ho trovato. Sentiti libero di provarlo. – van

+0

Ohh, avrò sicuramente una soluzione a questa soluzione. Se funziona su tutte le versioni di Android e soddisfa il punto 1 sulla mia risposta, accetterò la tua risposta invece della mia. :) – Rajkiran

1

Ho avuto a che fare con lo stesso problema. Volevo utilizzare .setError() nel mio EditText quando l'utente inserisce l'input nullo. Ma penso che il messaggio pop-out sia fastidioso, specialmente quando si hanno più EditText s. La mia soluzione era ingenua e semplice, ma ha funzionato su tutti i dispositivi che ho provato finora.

ho creato il mio myEditText classe e proprio @Override questo metodo:

@Override 
    public void setError(CharSequence error, Drawable icon) { 
     setCompoundDrawables(null, null, icon, null); 
    } 

quindi utilizzare in layout.xml

<cz.project.myEditText 
    ... 
    /> 

e, infine, nel mio codice ho messo onFocusChangeListener-myEditText, in modo che quando un utente fa clic -in, l'icona scompare.

myEditText input = (myEditText) findViewById(R.id.input); 
    input.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
      input.setError(null); 
    }); 

    if(val == null) input.setError(""); 

funziona esattamente come voglio = nessun messaggio pop-up quando si chiama .setError() su EditText.

7

Non è necessario creare una nuova classe EditText o modificare xml. La soluzione è molto semplice:

Edittext editText= (EditText) rootView.findViewById(R.id.email); 

String str= editText.getText().toString(); 

if(str.equalsIgnoreCase("")){ 

       Drawable dr = getResources().getDrawable(R.drawable.error); 
           //add an error icon to yur drawable files 
       dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight()); 

       editText.setCompoundDrawables(null,null,dr,null); 

      } 
-2

Questo è il molto utile quando si desidera mostrare i messaggi di errore per il campo EditText quando l'utente immettere informazioni errate.questo è molto semplice programma solo devi usare il metodo serError() nel edittext.

Passaggio 1: Creare il pulsante e implementare onclickListener.

btnLogin.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
} 
}); 

Fase 2: convalidare i campi di input e impostare l'errore nel campo di immissione.

if(edName.length()>3){ 
if(edNumber.length()>3){ 
Toast.makeText(getApplicationContext(), "Login success", Toast.LENGTH_SHORT).show(); 
}else{ 
edNumber.setError("Number Mininum length is 4"); 
} 
}else{ 
edName.setError("Name Mininum length is 4"); 
} 

consultare questo link per maggiori: http://velmuruganandroidcoding.blogspot.in/2014/08/set-error-message-in-edittext-android.html

+2

Potresti leggere di nuovo il titolo? Dice: EditText setError() con icona ma SENZA MESSAGGIO POPUP. – Rajkiran

0

di ottenere solo l'errore-icon senza un errore-messaggio-popup solo quando setError("") si chiama (vale a dire impostare una stringa vuota come errore-messaggio) io uso una consuetudine EditText-classe dove sovrascrivo setError(CharSequence, Drawable) come questo:

@Override 
public void setError(CharSequence error, Drawable icon) { 
    if (error == null) { 
     super.setError(null, icon); 
     setCompoundDrawables(null, null, null, null); 
    } 
    else if (error.toString().equals("")) setCompoundDrawables(null, null, icon, null); 
    else super.setError(error, icon); 
} 

Tutto il resto rimane lo stesso:

0.123.

Utilizzare setError(null) per non visualizzare né l'icona né il messaggio popup.

Utilizzare setError(errorMessage), dove errorMessage è una stringa con almeno la lunghezza 1, per ottenere l'icona e il messaggio popup.

Problemi correlati