Android:DroidParts-ClearableEditText-clear按钮位于一行

Android:DroidParts-ClearableEditText-clear按钮位于一行,android,android-edittext,droidparts,Android,Android Edittext,Droidparts,我正在使用DroidParts库获取可清除的编辑文本()。问题是如何将交叉/清除按钮保持在第一行。我不知道从哪里开始寻找,所以任何帮助都将是伟大的!谢谢 代码是: import static org.droidparts.util.Strings.isNotEmpty; import org.droidparts.adapter.widget.TextWatcherAdapter; import org.droidparts.adapter.widget.TextWatcherAdapter.

我正在使用DroidParts库获取可清除的编辑文本()。问题是如何将交叉/清除按钮保持在第一行。我不知道从哪里开始寻找,所以任何帮助都将是伟大的!谢谢

代码是:

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() > (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]);
    }
}  

有没有其他方法可以达到同样的效果?

是否希望图标保持在第一行(而不是像现在一样居中)?或者让ClearableEditText只占一行?@yanchenko让图标保持在第一行-即使我有多行。还有@yanchenko有没有办法让十字按钮发出“咔嗒”的声音,就像是一个普通的按钮?这似乎是不可能的。您必须使用带有EditText+清除图标的自定义布局。@MarciCăşvan P.S.yankchenko是制作droidparts的人,因此他可能会提供帮助。