Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid: DroidParts - ClearableEditText - clear button on one line
    text
    copied!<p>I am using the DroidParts library for Clearable EditTexts (<a href="http://droidparts.org/widgets.html#clearableedittext" rel="nofollow">http://droidparts.org/widgets.html#clearableedittext</a>). The question is how to keep the cross/clear button on the first line. I have no idea where to start looking so any help would be great! Thanks</p> <p>Code is this:</p> <pre><code>import static org.droidparts.util.Strings.isNotEmpty; import org.droidparts.adapter.widget.TextWatcherAdapter; import org.droidparts.adapter.widget.TextWatcherAdapter.TextWatcherListener; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnFocusChangeListener; import android.view.View.OnTouchListener; import android.widget.EditText; public class ClearableEditText extends EditText implements OnTouchListener, OnFocusChangeListener, TextWatcherListener { public interface Listener { void didClearText(); } public void setListener(Listener listener) { this.listener = listener; } private Drawable xD; private Listener listener; public ClearableEditText(Context context) { super(context); init(); } public ClearableEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ClearableEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { xD = getCompoundDrawables()[2]; if (xD == null) { xD = getResources() .getDrawable(android.R.drawable.presence_offline); } xD.setBounds(0, 0, xD.getIntrinsicWidth(), xD.getIntrinsicHeight()); setClearIconVisible(false); super.setOnTouchListener(this); super.setOnFocusChangeListener(this); addTextChangedListener(new TextWatcherAdapter(this, this)); } @Override public void setOnTouchListener(OnTouchListener l) { this.l = l; } @Override public void setOnFocusChangeListener(OnFocusChangeListener f) { this.f = f; } private OnTouchListener l; private OnFocusChangeListener f; @Override public boolean onTouch(View v, MotionEvent event) { if (getCompoundDrawables()[2] != null) { if (event.getAction() == MotionEvent.ACTION_UP) { boolean tappedX = event.getX() &gt; (getWidth() - getPaddingRight() - xD.getIntrinsicWidth()); if (tappedX) { setText(""); if (listener != null) { listener.didClearText(); } return true; } } } if (l != null) { return l.onTouch(v, event); } return false; } @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { setClearIconVisible(isNotEmpty(getText())); } else { setClearIconVisible(false); } if (f != null) { f.onFocusChange(v, hasFocus); } } @Override public void onTextChanged(EditText view, String text) { if (isFocused()) { setClearIconVisible(isNotEmpty(text)); } } protected void setClearIconVisible(boolean visible) { Drawable x = visible ? xD : null; setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], x, getCompoundDrawables()[3]); } } </code></pre> <p>Is there another method that will have the same effect?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload