55

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

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

如果我希望对话框立即出现,我应该怎么做?

4

6 回答 6

121

与大多数其他控件不同,EditText当系统处于“触摸模式”时,s 是可聚焦的。第一个 click 事件聚焦控件,而第二个 click 事件实际触发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" />
于 2010-02-17T22:39:17.403 回答
53

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

于 2012-08-28T17:38:12.773 回答
3

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

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

于 2010-01-22T17:23:11.483 回答
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" />
于 2010-01-22T22:14:53.113 回答
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) {

        }
    });
于 2018-03-13T05:59:22.373 回答
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" 

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

于 2010-01-22T19:48:25.663 回答