我有一个EditText该节目的时间。用户点击后,我想显示EditTextTimePickerDialog,所以我定了View.OnClickListenerEditText

OnClickListener是古怪的行为 - 我碰EditText然后软件键盘出现(我不想)。当我再次触摸,OnClickListener.onClick()最终调用,并在对话框出现。

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

有帮助吗?

解决方案

与大多数其他控制,而在系统处于“触摸模式” EditTexts是可聚焦的。第一次单击事件集中控制,而第二个点击事件实际上触发了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" />

其他提示

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

这听起来像你不希望用户居然能在EditText上打字。你只是希望他们能够通过一个时间选择器来选择时间。那么,为什么不只是一个按钮,弹出一个TimePickerDialog?你可以显示在一个TextView拾取的时间。

或者你可以只更换一个 TimePicker的视图的EditText 视图(未对话框,只是一个普通的视图)。

我解决了这个通过使用定制的按钮这样的:

<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" />

相反触摸监听器使用文本变化监听的:

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) {

        }
    });

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

<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" 

它被废弃,但确实特技。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top