平时我们开发时,如果页面中包含EditText,那么他会抢占焦点,并且弹出软键盘。如果我们不想让他获取焦点弹出软件怎么办呢?
两种方案:
第一,设置activity的属性为android:windowSoftInputMode="stateHidden|adjustResize。这样就可以隐藏软键盘弹出,但是EditText还是获取焦点的状态。windowSoftInputMode属性的含义可百度android:windowSoftInputMode,这里就不详细介绍了。
第二,设置Edittext的父布局的属性添加android:focusable="true" android:focusableInTouchMode="true"。具体原理:因为给父布局设置获取焦点的能力并且获取焦点,这样就会让EditText抢占不到焦点从而不弹出软键盘了。注意:这里添加属性的ViewGroup必须是EditText的父布局,不然可能会设置无效。
对于方案二,这里我有个疑问?既然是因为EditText抢占焦点存在键盘弹出的问题,那么我们是不是可以在页面加载时,清空EditText的焦点,这样子是不是EditText就会失去焦点不弹出软键盘了呢?经过测试,它居然是不会的,那这是为什么呢?原来呀,是因为受焦点分发的影响,焦点分发具体 百度,这里不做详细描述。首先页面中EditText是唯一一个具有获取焦点的的控件,虽然调用clearFocus()方法清空了焦点,但是它又会重新获取了焦点,因此就会给人觉得clearFocus()方法无效的假象,但真实情况是它在整个过程中是有过清空焦点的操作。