2016-01-11 16 views
7

La modifica del testo in Android non consente di modificare il disegno in grado dopo setError. Ho usato il diritto disegnabile per il campo della password ma se l'errore arriva nel campo della password non permetterà di cambiare il disegno dopo di esso. prima dell'errore funziona bene.Disegnabile direttamente nel testo di modifica non aggiornato dopo l'errore

<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" /> 

codice Java per cambiare icona occhio fase di esecuzione

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; 
      } 
     }); 

    } 

Per l'impostazione errore

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

live example

risposta

0

è possibile utilizzare questo come -

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);} 
+0

non funziona, ho provato anche questo. Penso che una volta che l'errore di Android set drwable non consenta ad altri drawable di sostituirlo. ho anche provato a impostareError (null) anche. – androidnoobdev

+0

Qual è il tuo sdk minimo e di destinazione? – Shane

+0

minSdkVersion 15, targetSdkVersion 23 y? questo è importante? – androidnoobdev

Problemi correlati