if (triggerGlobalLayoutListener) {
mAttachInfo.mRecomputeGlobalAttributes = false;
mAttachInfo.mTreeObserver.dispatchOnGlobalLayout();
}
当一个 Activity或者是Dialog 这样的 Window对添加的布局完成测量和布局后就会触发这个回调,从这里可以推断键盘弹出和收起的时候一定触发了 Activity 的重新布局
为什么键盘弹出会触发 Activity 的重新布局
Android提供了 windowSoftInputMode这个属性给开发者去配置键盘的状态以及界面该如何适配键盘
// 当前界面不做改变,键盘直接覆盖在界面上,不会重新布局所以不会触发 GlobalLayoutListener 回调
android:windowSoftInputMode=“adjustNothing”
// 改变当前布局的大小来适应键盘,会触发 GlobalLayoutListener 回调,这个配置就非常适合做微信这种 IM 聊天界面
android:windowSoftInputMode=“adjustResize”
// 直接把布局向上顶,会触发 GlobalLayoutListener 回调
android:windowSoftInputMode=“adjustPan”
// 默认值,界面可以滑动会设置成 adjustResize,反之 adjustPan
android:windowSoftInputMode=“adjustUnspecified”
键盘弹起会改变界面布局,所以可以通过上述方式去判断键盘是否弹起
如何判断键盘弹起
键盘弹起会改变当前 Window 的可见区域,那么如果当前可见高度小于原始的高度,我们就判断键盘弹起了
可以通过 View 中的方法获取该 View 所在 Window 的可见区域
view.getWindowVisibleDisplayFrame(Rect)
那么原始高度和现在高度相减的值就是键盘的高度
RecyclerView 顶部渐变消失效果
=====================
RecyclerView提供了这个属性可以达到这个效果(做项目的时候不知道有这个属性,难死了)android:requiresFadingEdge=“vertical”,不过设置这个属性之后android:overScrollMode="never"就没作用了,所以这里重写了RecyclerView
// android:overScrollMode=“never” 样式
edgeEffectFactory = object : EdgeEffectFactory() {
override fun createEdgeEffect(view: RecyclerView, direction: Int): EdgeEffect {
return object : EdgeEffect(context) {
override fun draw(canvas: Canvas): Boolean {
return false
}
}
}
}
RecyclerView 设置最大高度
===================
直播中的弹幕一般都是随着弹幕数量的增加高度也会增加,直到一个最大高度,所以在 xml里设置高度打不到这种效果,这里重写 onMeasure方法设置一下 MeasureSpec
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
// 设置最大高度
val heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST)
super.onMeasure(widthSpec, heightMeasureSpec)
}
具体实现方案
======
在直播的 Activity中要设置android:windowSoftInputMode=“adjustNothing”,不能让界面布局响应键盘的变化,把监听键盘的工作交给弹幕输入框,输入框用 Dialog实现并且设置全屏,这样就可以在 Dialog中添加 GlobalLayoutListener 去监听键盘的状态了.
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
[外链图片转存中…(img-LMFnzUu2-1712357516852)]
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!