在App开发中有些页面的功能定位就是搜索,用户进入该页面的唯一仅有的目的就是搜索,比如淘宝点击搜索框跳转的搜索商品页面,对于这种页面最好的设计就是一进入就把焦点定位在输入框,且弹出输入法,用户一进入进可以直接在软键盘上输入,而不必要再点一下输入框再弹出输入法。虽然是一个很细节的东西,但却是很好的用户体验。
废话这么多,该上代码了
1 | <activity |
还有另一个属性stateAlwaysVisible也可以实现同样的功能。
1 | <activity |
stateVisible和stateAlwaysVisible的区别
既然stateVisible和stateAlwaysVisible都可以实现一进入Activity就弹出软键盘的功能,那么这两者又有什么区别呢?我们先看下谷歌官网的说明:
stateVisible |
The soft keyboard is visible when that’s normally appropriate (when the user is navigating forward to the activity’s main window). |
---|---|
stateAlwaysVisible |
The soft keyboard is made visible when the user chooses the activity — that is, when the user affirmatively navigates forward to the activity, rather than backs into it because of leaving another activity. |
但是我个人觉得官网的解释有误(如果我的英语理解能力没错的话),对于stateAlwaysVisible,官网的说明是说从其他地方进入Activity的话,会弹出软件盘,如果是从其他页面返回的话是不会弹出的。
单我的理解是设置成stateAlwaysVisible的话,不管是往前进入,还是从其他页面返回,总是会弹出软键盘。
为了验证我的想法,我写了两个Activity验证下
MainActivity中有一个Edittext和一个Button,点击Button跳转到SecondActivity
首先先设置MainActibity的android:windowSoftInputMode=”stateVisible”,首先进入MainActivity,软键盘自动弹出,然后收起软键盘,点击Button跳转SecondActivity后再返回MainActivity,发现软键盘不弹出了。但是如果我们收起软键盘后不是进入SecondActivity再返回,而是按Home键返回左面再重新进入MainActivity,会发现输入法会重新弹出。
接下来设置MainActibity的android:windowSoftInputMode=”stateAlwaysVisible”,首先进入MainActivity,软键盘自动弹出,然后收起软键盘,点击Button跳转SecondActivity后再返回MainActivity,发现已经收起的软键盘会再次弹出来。这也验证了我的想法,说明官网的描述有误。
总结
stateVisible:从其他页面或桌面往前进入该Activity,会弹出软件盘,如果是从其他页面返回该Activity,则已收起的软键盘不会再弹出。
stateAlwaysVisible:不管是从从其他页面或桌面往前进入该Activity,还是从其他页面返回该Activity,已收起的软键盘都会再弹出。
在代码中设置softInputMode
当然,我们也可以在Activity的onCreate中设置softInputMode,如下代码所示,和在Manifest中设置是等价的
1 | // 等价于android:windowSoftInputMode="stateVisible" |