如何做好用户点击后的东西在我的EditText
-
22-09-2019 - |
题
我有一个EditText
该节目的时间。用户点击后,我想显示EditText
的TimePickerDialog
,所以我定了View.OnClickListener
我EditText
。
但OnClickListener
是古怪的行为 - 我碰EditText
然后软件键盘出现(我不想)。当我再次触摸,OnClickListener.onClick()
最终调用,并在对话框出现。
我应该怎么做,如果我想在对话框立即出现?
解决方案
与大多数其他控制,而在系统处于“触摸模式” EditText
s是可聚焦的。第一次单击事件集中控制,而第二个点击事件实际上触发了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"
它被废弃,但确实特技。
不隶属于 StackOverflow