Android 使不可编辑的EditText响应第一次单击

Android 使不可编辑的EditText响应第一次单击,android,Android,我试图在用户单击EditText时显示一个弹出菜单,但我不希望EditText本身是可编辑的。我尝试过很多方法,比如将其keystener设置为null,将其InputType设置为null,但总是发生的是,第一次单击提供了视图焦点,第二次单击实际上注册到了我的OnClickListener。因此,用户必须单击两次才能使菜单弹出。有什么想法吗 public class PopupEditText extends EditText implements OnClickListener {

我试图在用户单击EditText时显示一个弹出菜单,但我不希望EditText本身是可编辑的。我尝试过很多方法,比如将其
keystener
设置为null,将其
InputType
设置为null,但总是发生的是,第一次单击提供了视图焦点,第二次单击实际上注册到了我的OnClickListener。因此,用户必须单击两次才能使菜单弹出。有什么想法吗

public class PopupEditText extends EditText implements OnClickListener
{
    private PopupMenu mMenu;
    private Context   mContext;

    public PopupEditText(Context context)
    {
        super(context);
        init(context);
    }

    public PopupEditText(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init(context);
    }

    public PopupEditText(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init(context);
    }

    private void init(Context context)
    {
        mContext = context;
        setKeyListener(null);
        mMenu = new PopupMenu(context, this);
    }

    @Override
    public void onClick(View view)
    {
        mMenu.show();
    }

你不远了。我建议直接重写
onTouchEvent()
,只对
ACTION\u UP
事件做出响应。(可选)强制将其禁用且不可聚焦。例如:

public class UnmodifiableEditText extends EditText {
    private PopupMenu mPopupMenu;

    public UnmodifiableEditText(Context context) {
        super(context);
        init(context);
    }

    public UnmodifiableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public UnmodifiableEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    private void init(Context ctx) {
        super.setEnabled(false);
        super.setFocusable(false);
        mPopupMenu = new PopupMenu(ctx, this);
    }

    @Override public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            Toast.makeText(getContext(), "Showing Popup", Toast.LENGTH_SHORT).show();
            mPopupMenu.show();
        }

        return true;
    }

    @Override public void setEnabled(boolean enabled) {
        // Do not allow enabling the EditText
    }

    @Override public void setFocusable(boolean focusable) {
        // Do not allow focusability changes
    }
}

这很好,除了现在显示的文本变灰,因为我将其设置为禁用。知道要覆盖什么来修复吗?不要将其设置为禁用?如果目的是它不可编辑,那么让它清楚地表明它不可编辑似乎更好。