我有一个EditText
显示时间的。用户点击后EditText
我想显示 a TimePickerDialog
,所以我将 a 设置View.OnClickListener
为我的EditText
.
但是它OnClickListener
的行为很奇怪 - 我触摸EditText
然后出现软件键盘(我不想要)。当我再次触摸时,OnClickListener.onClick()
终于调用并出现对话框。
如果我希望对话框立即出现,我应该怎么做?
我有一个EditText
显示时间的。用户点击后EditText
我想显示 a TimePickerDialog
,所以我将 a 设置View.OnClickListener
为我的EditText
.
但是它OnClickListener
的行为很奇怪 - 我触摸EditText
然后出现软件键盘(我不想要)。当我再次触摸时,OnClickListener.onClick()
终于调用并出现对话框。
如果我希望对话框立即出现,我应该怎么做?
与大多数其他控件不同,EditText
当系统处于“触摸模式”时,s 是可聚焦的。第一个 click 事件聚焦控件,而第二个 click 事件实际触发OnClickListener
. 如果您使用android:focusableInTouchMode
View 属性禁用触摸模式焦点,则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 中选取的时间。
或者您可以将 EditText 视图替换为TimePicker视图(不是对话框,只是常规视图)。
我通过使用这样的自定义按钮解决了这个问题:
<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"
这已被弃用但可以解决问题。