图片编辑器--视图布局 View 悬浮在软键盘上

心急的同学,代码和结论在最后。
公众号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: Ethoshttps://github.com/xwdoor/Ethos),欢迎大家给颗星星,哈哈。

推荐阅读:

  1. 图片编辑器–向上弹出文字编辑框(遮罩)界面
  2. 图片编辑器–视图布局 View 悬浮在软键盘上

微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值