在
android中编辑文本不允许在setError之后更改drawable.
我在密码字段中使用了drawable right,但如果密码字段中出现错误,则不允许在其后更改drawable.错误之前它工作正常.
我在密码字段中使用了drawable right,但如果密码字段中出现错误,则不允许在其后更改drawable.错误之前它工作正常.
<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" />
用于更改眼睛图标运行时的Java代码
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,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,showpass_icon.getIntrinsicWidth(),showpass_icon.getIntrinsicHeight()); edtPassword.setCompoundDrawables(pass_drawable,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,hidepass_icon.getIntrinsicWidth(),hidepass_icon.getIntrinsicHeight()); edtPassword.setCompoundDrawables(pass_drawable,hidepass_icon,null); } }); isPasswordVisible = true; } } return false; } }); }
用于设置错误
public void setViewError(View view,String message) { if (view instanceof EditText) { ((EditText) view).setError(message); } }
解决方法
你可以用这个 –
if(error=true){ editText.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.ic_error,0); editText.setCompoundDrawablePadding(5);} else{ editText.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.ic_corrct,0); editText.setCompoundDrawablePadding(5);}