Droit dessiné dans l'édition de texte sans mise à jour après erreur

Modifier le texte dans Android ne permet pas de modifier Draw après setError . J'ai utilisé le droit drawable pour le champ du mot de passe, mais si l'erreur arrive dans le champ du mot de passe, il ne permettra pas de changer le dessin après lui. Avant l'erreur, ça marche bien.

<EditText android:id="@+id/edt_reg_password" style="@style/editText_full_view" android:layout_height="wrap_content" android:layout_below="@id/edt_reg_email" android:layout_marginTop="@dimen/padding_normal" android:drawableLeft="@mipmap/ic_action_password" android:drawableRight="@mipmap/ic_action_password_visibility" android:drawablePadding="@dimen/padding_normal" android:hint="@string/hint_password" android:inputType="textPassword" android:maxLength="25" android:paddingLeft="@dimen/padding_normal" tools:visibility="visible" /> 

Code Java pour changer l'heure de l'icône des yeux

 private void setPasswordDrawable() { final Drawable showpass_icon = getResources().getDrawable(R.mipmap.ic_action_password_visibility); final Drawable hidepass_icon = getResources().getDrawable(R.mipmap.ic_action_password_visibility_off); final Drawable pass_drawable = getResources().getDrawable(R.mipmap.ic_action_password); pass_drawable.setBounds(0, 0, pass_drawable.getIntrinsicWidth(), pass_drawable.getIntrinsicHeight()); //edtPassword.setCompoundDrawables(pass_drawable, null, showpass_icon, null); edtPassword.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (edtPassword.getCompoundDrawables()[2] == null) { return false; } if (event.getAction() != MotionEvent.ACTION_UP) { return false; } if (event.getX() > edtPassword.getWidth() - edtPassword.getPaddingRight() - showpass_icon.getIntrinsicWidth()) { if (isPasswordVisible) { runOnUiThread(new Runnable() { @Override public void run() { //edtPassword.setError(null); edtPassword.setTransformationMethod( PasswordTransformationMethod.getInstance()); edtPassword.setSelection(edtPassword.getText().length()); showpass_icon.setBounds(0, 0, showpass_icon.getIntrinsicWidth(), showpass_icon.getIntrinsicHeight()); edtPassword.setCompoundDrawables(pass_drawable, null, showpass_icon, null); } }); isPasswordVisible = false; } else { runOnUiThread(new Runnable() { @Override public void run() { //edtPassword.setError(null); edtPassword.setTransformationMethod( HideReturnsTransformationMethod.getInstance()); edtPassword.setSelection(edtPassword.getText().length()); hidepass_icon.setBounds(0, 0, hidepass_icon.getIntrinsicWidth(), hidepass_icon.getIntrinsicHeight()); edtPassword.setCompoundDrawables(pass_drawable, null, hidepass_icon, null); } }); isPasswordVisible = true; } } return false; } }); } 

Pour définir une erreur

 public void setViewError(View view, String message) { if (view instanceof EditText) { ((EditText) view).setError(message); } } 

Exemple en direct

  • Ajout d'une annotation personnalisée sur Android Saripaar
  • Android 6 EditText.setError ne fonctionne pas correctement
  • One Solution collect form web for “Droit dessiné dans l'édition de texte sans mise à jour après erreur”

    Vous pouvez utiliser cela comme –

     if(error=true){ editText.setCompoundDrawablesWithIntrinsicBounds( 0, 0,R.drawable.ic_error, 0); editText.setCompoundDrawablePadding(5);} else{ editText.setCompoundDrawablesWithIntrinsicBounds( 0, 0,R.drawable.ic_corrct, 0); editText.setCompoundDrawablePadding(5);} 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.