Ich habe kürzlich Android Design-Bibliothek von 24.2.1 auf 25.0.0 aktualisiert. Danach funktioniert die "DrawableX" -Funktion in EditText nicht.Kann nicht in EditText in TextInputLayout verwendet werden
EDIT 01.11: Ich habe gelernt, dass Einstellung in Xml funktioniert, wenn Sie Android: DrawableStart anstelle von Android: DrawableLeft. Das programmatische Einstellen von Einstellungen funktioniert jedoch nicht. Ich benutze dies um einen "Clear" -Button zu machen, um den EditText zu leeren. Aber diese Funktion ist jetzt kaputt. Ich würde mich über jegliche Umgehung oder Kenntnis darüber freuen, ob dies von Google oder einem Bug beabsichtigt ist!
Mein Code für Ignorierbare edit-Text, der vor gearbeitet, aber nicht jetzt:
public class ClearableErrorTextInputEditText extends ErrorTextInputEditText implements View.OnFocusChangeListener, View.OnTouchListener, TextWatcher {
private Drawable resIcon;
private OnFocusChangeListener childFocusListener;
public ClearableErrorTextInputEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setup();
}
public ClearableErrorTextInputEditText(Context context, AttributeSet attrs) {
super(context, attrs);
setup();
}
public ClearableErrorTextInputEditText(Context context) {
super(context);
setup();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (getCompoundDrawables()[2] != null) {
final boolean tappedClose = event.getX() > (getWidth() - getPaddingRight() - resIcon.getIntrinsicWidth());
if (tappedClose) {
setText("");
return false; // true will fail on emulator running 2.1 and physical keyboard/scroll wheel
}
}
}
return false;
}
@Override
public void setOnFocusChangeListener(OnFocusChangeListener l) {
childFocusListener = l;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
setClearIconVisible(hasFocus && getText().length() > 0);
if (childFocusListener!=null){
childFocusListener.onFocusChange(v, hasFocus);
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){
super.onTextChanged(s, start, before, count);
setClearIconVisible(isFocused() && s.length() > 0);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // not interesting
@Override
public void afterTextChanged(Editable s) {} // // not interesting
private void setup() {
if(isInEditMode()){
return;
}
resIcon = getResources().getDrawable(R.drawable.ic_clear, null);
resIcon.setBounds(0, 0, resIcon.getIntrinsicWidth(), resIcon.getIntrinsicHeight());
setClearIconVisible(false);
super.setOnTouchListener(this);
super.setOnFocusChangeListener(this);
addTextChangedListener(this);
}
private void setClearIconVisible(final boolean visible){
final Drawable icon = visible ? resIcon : null;
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], icon, getCompoundDrawables()[3]);
}
Dies funktionierte, wenn Sie Zeichnungsdateien in XML hinzufügen! – Gober
Yup, es ist seltsam, DrawableLeft sollte nicht von DrawableStart abhängig sein, wahrscheinlich ein Bug. –
Aber mein wirkliches Problem ist, dass ich es programmatisch machen will, da ich das Clear-Icon zeige und verstecke, wenn Text vorhanden ist oder nicht. Ich benutze setCompoundDrawables(), und das zeigt nichts (es tat vorher) – Gober