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);
}
}
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
Qual è il tuo sdk minimo e di destinazione? – Shane
minSdkVersion 15, targetSdkVersion 23 y? questo è importante? – androidnoobdev