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