Android 一些技术点杂记

1.TabLayout相关

1.能否实现indicator渐变色

不能,除非自定义view,也就是是针对每个TAB设置customView

2.自定义customView自带间距如何消除

设置自定义View时,手动消除间距

tab.view.setPadding(0,0,0,0)

2.聊天布局

聊天布局很场景,上面是聊天的列表内容,下面是输入框

1.如何让聊天输入框聚焦+软键盘顶起的时候,列表布局也跟着顶上去

同理,软键盘收起的时候,列表要同步往下拉

1.manifest文件中设置adjustResize,支持调整布局
2.xml布局中:NestedScrollView包裹LinearLayout(含有占满的RecycleView都底部的EditText)
3.页面布局完成时,通过NestedScrollView高度减去EditText的高度,剩下的高度设置给RecycleView

通过该几步即可实现效果

但是还有些问题:
1.若底部输入框是可变高度,则会导致ScrollView的高度发生变化
则会出现滑动的时候输入框会超出部分。
处理:

监听输入框区域高度的变化,重新计算列表布局的高度即可。

2.输入框与ScrollView滑动冲突的问题
处理:

editText设置touchListener,默认返回false,其中处理scrollView.requestDisallowInterceptTouchEvent(true)

2.如何监听软键盘弹出和收起

网上案例太多了

3.ViewPager2

1.如何实现页面切换动画为覆盖的效果

设置切页动画无效(仅第一次有效)
方法:

在切页前设置viewPager2.setCurrentItem(tab.position,false)
设置false很重要,即去掉平滑滑动,也就呈现了替换页面的动画效果

2.NestedScrollView嵌套ViewPager2

使用scrollView.fullScroll(View.FOCUS_DOWN)可以让软键盘顶起的时候,布局也往上顶。
但是,底部的输入框焦点会丢失。如何处理?采用如下方法

val scrollY = scrollView.getChildAt(0).height - scrollView.height
scrollView.scrollTo(0,scrollY)

因为scrollTo未进行焦点的重新获取,所以不会对EditText焦点造成影响。

4.ConstraintLayout

1.如何实现两个View等宽

说到这里,既然在ConstraintLayout下,那么里面约束即可做到。

一个View的约束start与end对齐另外一个view即可

同理,等高也是一样的方法。

5.获取屏幕高度

原有的getDefaultDisplay方法已经过时,且在设备上获取的高度不包括状态栏和底部导航栏。
更改的方法参考:
https://blog.csdn.net/banzhuantuqiang/article/details/135245512

6.RecycleView

1.嵌套竖向RecycleView滑动处理

第二层RecycleView在只是显示子item个数的情况(不分页加载),一般会出现滑动无法带动最外层滑动的情况

如何上下滑动最里层的RecycleView时带动最外层滑动?
将被包裹的RecycleView的LinearLayoutManager重写,覆写canScrollVertically并返回false即可。

7.软键盘

1.监听软键盘

实现方式是:
通过rootView.viewTreeObserver.addOnGlobalLayoutListener来进行布局监听,获取超过屏幕0.15即认为是发生了软键盘弹窗,否则是隐藏了软键盘。

这种方式是可以监听到软键盘的显示和关闭,但需要注意的时候,此处收到事件时,其实软键盘状态还未发生变更。(因为事件分发从顶层向底层传递)若想获取被顶起的布局位置等信息,需要做个延时获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ganshenml

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值