EditText 点击事件小问题

来源:互联网 发布:一键开关蜂窝数据 编辑:程序博客网 时间:2024/04/30 20:55

EditText 点击事件小问题


怎么回事

最近在工作的时候遇到一个小小的磕绊,给EditText添加点击事件的时候,需要对控件点击两次,才能触发自定义的 OnClickListener,这是怎么回事?

找了下谷娘才知道,EditText第一次点击的时候,会先获得屏幕的焦点,将首次TouchEvent消费掉,并不会触发自定义的 onClick 监听。

这样的话最简单直接的办法就是,再为 EditText 加一个 onFocusChangeListener ,当获取到焦点的时候,执行自定义的逻辑。另外,如果加了FocusChange就删掉OnClick的监听的话,在具有焦点的情况下继续点击将不会执行自定义逻辑。

后来看到一些说法,实际上为EditText添加OnClick监听是挺不科学的,原因是EditText作为一个输入控件,用户使用控件的过程中有可能因为输入错误等原因,对控件进行点击交互。那么在编写这段代码的时候,有可能就需要加入许多对用户行为的判断以及过滤,这样写出来的代码并不良好,也容易出错。

办法

也许在UI上面,只是需要一个看起来像 EditText 的控件,并不需要EditText内置的交互逻辑。这种情况其实可以用一个TextView将其样式修改成EditText的样子,以及这时候如果需要自定义逻辑,只要一个点击监听就可以了。

<TextView        style="@android:style/Widget.EditText"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="我看起来像个EditText!" />

也可以自定义背景以及文本样式——

<TextView    android:background="@drawable/abc_edit_text_material"    android:textAppearance="@style/TextAppearance.AppCompat.Medium"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="我看起来像个EditText!" />
0 0