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

时间:2010-01-22 17:17:29

标签: android android-edittext onclicklistener

我有一个显示时间的EditText。用户点击EditText后我想显示TimePickerDialog,因此我将View.OnClickListener设置为EditText

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

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

6 个答案:

答案 0 :(得分:109)

与大多数其他控件不同,EditText在系统处于“触摸模式”时是可聚焦的。第一次单击事件聚焦控件,而第二次单击事件实际触发OnClickListener。如果您使用android:focusableInTouchMode视图属性停用了触摸模式焦点,则OnClickListener应按预期触发。

<EditText
        android:text="@+id/EditText01"
        android:id="@+id/EditText01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="false" />

答案 1 :(得分:44)

另一种解决方案是使用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...
    }
});

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

答案 2 :(得分:3)

听起来你不希望用户真正能够输入EditText。你只是希望他们能够通过时间选择器选择时间。那么为什么不只是一个弹出TimePickerDialog的按钮呢?您可以显示在TextView中选择的时间。

或者你可以用TimePicker视图替换EditText视图(不是对话框,只是常规视图)。

答案 3 :(得分:2)

我通过使用这样的自定义按钮解决了这个问题:

<Button
        android:id="@+id/btTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:text="test"
        android:textSize="20dp"
        android:background="@android:drawable/edit_text" />

答案 4 :(得分:2)

而不是触摸侦听器使用文本更改侦听器:

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //yourFunction();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

答案 5 :(得分:1)

如果我理解正确你只需要像

那样的东西
<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:clickable="true" android:inputType="none" />

不可编辑且可点击。设置OnClickListener即可完成。 从理论上讲,在实践中你也应该加上

android:editable="false" 

已被弃用,但却可以解决问题。