有时候我们需要把一个EditText作为搜索框放在首页上,但一般而言EditText是默认获取焦点的,所以进入首页后EditText里面就会显示焦点,并且弹出输入法,交互非常恶劣。
隐藏输入法很好解决,但如何让EditText不默认获取焦点涉及到点击事件,这里细细理一下。
在XML中设置,让EditText的父级容器上默认获取焦点,即:
android:focusable="true"
android:focusableInTouchMode="true"
于是,进入首页之后,焦点默认在父级容器上,EditText里面不会显示光标,用户体验上升。
但是,我们需求当点击父级容器的时候,需要启动搜索,即:让EditText获得焦点,还需要给EditText设置一些动画。我们可以使用editView.requsetFocus
使EditView获得焦点。
但现实是我们需要两次点击才会成功。这是因为第一次点击,焦点变化,第二次点击,才是真正触发onclick事件。
这里提供另一种方法,给EditText设置监听事件OnFocusChangeListener。就是将所有启动搜索的事件,包括动画等放在监听事件里面:
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
}else{
}
}
通过EditText是否获得焦点,直接来做出一些后续事件。这样,当第一次点击,焦点变化的时候,后续的动画反应就出来了。取代onClick事件中设置的方法。
网友评论