Android 使不可编辑的EditText响应第一次单击
我试图在用户单击EditText时显示一个弹出菜单,但我不希望EditText本身是可编辑的。我尝试过很多方法,比如将其Android 使不可编辑的EditText响应第一次单击,android,Android,我试图在用户单击EditText时显示一个弹出菜单,但我不希望EditText本身是可编辑的。我尝试过很多方法,比如将其keystener设置为null,将其InputType设置为null,但总是发生的是,第一次单击提供了视图焦点,第二次单击实际上注册到了我的OnClickListener。因此,用户必须单击两次才能使菜单弹出。有什么想法吗 public class PopupEditText extends EditText implements OnClickListener {
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
}
}
这很好,除了现在显示的文本变灰,因为我将其设置为禁用。知道要覆盖什么来修复吗?不要将其设置为禁用?如果目的是它不可编辑,那么让它清楚地表明它不可编辑似乎更好。