如何在用户点击我的EditText后做些什么
我有一个EditText
显示时间。 用户单击EditText
我想显示一个TimePickerDialog
,所以我将一个View.OnClickListener
设置为我的EditText
。
但是, OnClickListener
行为怪异 – 我触摸EditText
,然后出现软件键盘(我不想)。 当我再次触摸时,最终调用OnClickListener.onClick()
并出现对话框。
如果我想让对话立即出现,我该怎么办?
与大多数其他控件不同的是,当系统处于“触摸模式”时, EditText
是可以聚焦的。 第一个点击事件关注控件,而第二个点击事件实际上会触发OnClickListener
。 如果使用android:focusableInTouchMode
OnClickListener
View属性禁用触摸模式焦点,则OnClickListener
应按预期方式触发。
<EditText android:text="@+id/EditText01" android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusableInTouchMode="false" />
另一个解决scheme是使用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
事件被处理,键盘不会popup。 如果你想要键盘仍popup并注册点击,你会有它返回false
。
这听起来像你不希望用户真的能够inputEditText。 你只是希望他们能够通过时间select器来select一个时间。 那么为什么不只是一个popupTimePickerDialog的button? 您可以显示在TextView中选取的时间。
或者你可以用TimePicker视图replaceEditText视图(不是对话框,只是一个常规的视图)。
我通过使用这样的自定义button来解决这个问题:
<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 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"
这是弃用,但伎俩。