我尝试在用户点击EditText时显示弹出菜单,但我不想让EditText本身可编辑。我尝试了许多操作,比如将KeyListener
设置为null,将其InputType
设置为null,但总是会发生第一次点击给出View焦点和第二次点击实际上注册我的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();
}
答案 0 :(得分:1)
你离我不远。我建议您直接覆盖onTouchEvent()
,并仅回复ACTION_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
}
}