用户点击我的EditText后如何做某事

fhu*_*cho 51 android android-edittext onclicklistener

我有一个EditText显示时间.用户点击后EditText我想显示一个TimePickerDialog,所以我设置了一个View.OnClickListener到我的EditText.

但是OnClickListener表现得很奇怪 - 我触摸EditText然后软键盘出现(我不想要).当我再次触摸时,OnClickListener.onClick()最后调用并出现对话框.

如果我希望对话框立即显示,我该怎么办?

Kai*_*Kai 112

与大多数其他控件不同,EditText当系统处于"触摸模式"时,s是可聚焦的.第一个单击事件聚焦控件,而第二个单击事件实际触发控件OnClickListener.如果使用android:focusableInTouchModeView属性禁用触摸模式焦点,则OnClickListener应按预期触发.

<EditText
        android:text="@+id/EditText01"
        android:id="@+id/EditText01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="false" />
Run Code Online (Sandbox Code Playgroud)

  • 重要的是,如果你想做一些额外的动作,比如显示键盘,如果你添加这个,键盘不能输入onymore :( (6认同)
  • 还有android:focusable,可以在触摸和非触摸模式下工作 (2认同)

War*_*zit 47

另一个解决方案是使用ontouchlistener:

edittext.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(MotionEvent.ACTION_UP == event.getAction()) {
            mQuaternion_1.setText("" + mQ1);
        }

        return true; // return is important...
    }
});
Run Code Online (Sandbox Code Playgroud)

如果它返回true,则处理事件并且键盘不会弹出.如果你想让键盘仍然弹出并注册点击你就会让它返回false.

  • 我会选择这个作为通用问题"用户点击我的EditText后如何做某事"的正确答案.无法轻松管理xml和键盘状态的更改.其他答案将EditText转换为Button. (3认同)