2016-01-11 35 views
7

Edytuj tekst w Androidzie nie pozwala na zmianę rysowania po setError. Użyłem drawable right dla pola hasła, ale jeśli błąd pojawia się w polu hasła, to nie pozwala na zmianę drawa po nim. przed błędem działa dobrze.Ciągnięte prawo w edytowanym tekście nie aktualizuje się po błędzie

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

kod Java na zmianę ikony oka czas pracy

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

    } 

Aby ustawić błąd

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

live example

Odpowiedz

0

może użyć tego jak -

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

to nie działa, próbowałem tego również. Myślę, że po usunięciu błędu zestawu android nie pozwala on na zastąpienie go innym drawable. Próbowałem nawet setError (null) również. – androidnoobdev

+0

Jaki jest twój minimalny i docelowy sdk? – Shane

+0

minSdkVersion 15, targetSdkVersion 23 y? czy to ma znaczenie? – androidnoobdev