心急的同学,代码和结论在最后。
公众号ID:goodKotlin,名称:XWdoor
夸夸其谈
几乎所有的项目中,都会输入编辑框与软键盘,但是,不同项目 EditText 就会遇到不同的待遇:
- 刚进界面就要弹出键盘
- 刚进界面不要弹出软键盘,用户点击后才弹
- 界面不要被软键盘顶上去
- 软键盘只把这个编辑框顶上去
同样是软键盘,为什么有的被吃牢狱之灾,有的又像菩萨被供着呢?
就跟同样是来北京实现梦想的,为什么别人运气那么好,你运气那么背呢?
如果你是这么想的,那我得批评你:你需要向现实妥协,别人表面是运气好(也的确比你运气好),但是你不知道他背后有多努力,而你没有人家那运气,你还不努力,只有感叹,这就是你不对了。
所以,赶紧关注我的公众号,大家一起努力呀,这才是重点,哈哈。
关于软键盘那点事
接着上一篇文章来,讲讲我是怎么拿捏,哦不,伺候软键盘 SoftInput 的。不知道上篇内容的也不要紧,看链接:「图片编辑器–向上弹出文字编辑框(遮罩)界面」,当然,你不看也不影响阅读本篇文章。
我对软键盘的态度是:显示编辑界面后,弹出软键盘,并把布局 View 顶上去。
布局上添加 ScrollView
其实只要在布局中添加 ScrollView 控件,就能将整个布局顶上去。就像下边这样:
scrollView {
relativeLayout {
editToolBar = linearLayout {
button("编辑")
}.lparams(matchParent, wrapContent) {
alignParentBottom()
}
// todo: 之后采用 constraintLayout
editMask = verticalLayout {
relativeLayout {
textView("取消").lparams(wrapContent, wrapContent) {
alignParentLeft()
}
textView("完成").lparams {
alignParentRight()
}
}
editView = editText {
}.lparams(matchParent, 0, 1f)
linearLayout {
textView("tool bar")
}
}.lparams(matchParent, 0) {
alignParentBottom()
}
}
}
OK,加上 ScrollView
后,应该万事大吉了,就是这么简单。
等等,有新情况:软键盘出现时,的确将布局顶上去了,但是,最上边的两个「取消」「完成」按钮看不见了,下边的「tool bar」也看不见了,怎么肥四?!难道是上天不要我努力?
兄台别急,我来告诉你是什么情况:软件盘只保证 EditText
被顶上去,其他一律不管,所以你懂得。
所以我们只需要变通一下就好啦,我们将 ScrollView
的范围缩小就好,就像下边示范的一样:
// scrollView 是为 view 漂浮在软键盘上做准备
scrollView {
linearLayout {
textView("tool bar")
}
}
这样就可以满足我们的所有要求啦。 基于 ScrollView
可滚动以及布局的特性,它包裹的元素越少越好,甚至不包含任何子 View
,只当一个安静的美男子,哦,说错了,是一个空 ViewGroup
。就像这样:
linearLayout {
textView("tool bar")
}
// 不包含任何子 View,也能实现上浮在软键盘上的效果
scrollView {
}
软键盘的显示与隐藏
对此,我封装了三个软件盘的扩展方法,你可以择机调用。如下:
/**
* 开关软键盘
* 若当前隐藏,则显示;若当前是显示,则隐藏。
*/
fun Context.toggleSoftInput() {
// 开关软键盘
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS)
}
/**
* 显示软键盘
*
* @param view 能够获取焦点的且已经获取焦点的当前布局中的 view
*/
fun Context.showSoftInput(view: View) {
inputMethodManager.showSoftInput(view, 0)
}
/**
* 隐藏软键盘
*
* @param view 当前布局中的任意 view
*/
fun Context.hideSoftInput(view: View) {
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
最后
由于是科班出身,文笔不是很好,以后会逐步提高。如果有错误的地方,欢迎大家指正。
如果文章对你有帮助的话,欢迎关注公众号:XWdoor,你的关注,就是最大的支持。
文章源码:GitHub: Ethos(https://github.com/xwdoor/Ethos),欢迎大家给颗星星,哈哈。
推荐阅读: