多语言:应用设置语言后获取到的资源错误
描述:应用内有一套语言覆盖逻辑,在应用内切换语言后,发现某些位置并未获取到需要的资源。
背景:发生在华为手机上,系统语言为中文,应用内覆写为英文,获取到的string却依旧是中文。
解决办法:将获取资源的context由application的context类型换为activity的context类型。原因猜测是因为application生命周期最长,华为对逻辑做了改动导致,毕竟其他手机并不会。
参考:https://blog.csdn.net/GerryRun/article/details/103703264
Viewpager手势冲突问题
背景:一般来说,如果是用的框架或者库什么的不会有什么问题,可我有时候喜欢自己写。需求是这样:全屏的viewpager,上层盖一个类似toolbar的下拉栏。伪代码:
<FrameLayout> <ViewPager match_parent match_parent /> <CustomDragView/> </FrameLayout>
于是发生滑动冲突,按照FrameLayout的绘制顺序,事件先传递给CustomDragView,再传给ViewPager,这样在ViewPager滑动前就已经由CustomDragView响应了拖拽事件,从而无法在ViewPager滑动时不响应CustomDragView拖拽事件。
解决办法:伪代码:
<FrameLayout> <CustomDragView/> <ViewPager match_parent match_parent /> </FrameLayout>
这样即可,因为ViewPager设定为全屏,此时会先交由ViewPager进行处理触摸事件,若ViewPager拦截了,CustomDragView也就不必再做处理了。
参考:https://blog.csdn.net/jianesrq0724/article/details/75128108
Android 6种屏幕位置的获取
最近很多动画手势都涉及到view位置的变更,对于这类计算,一开始就需要获取到view的原始位置,这里有篇文章写得很好,就不搬了。
然后就是一系列对于速度位置的变更了。
参考:https://juejin.im/entry/5dae45f8f265da5ba46f6106
Android TextView 行距 间距
间距:android:letterSpacing
行距:android:lineSpacingExtra
仅记录下,对应代码也有set方法,网上很多。弊端也有,就是需要UI调整,有时候数值并不是UI想要的数值。
参考:https://blog.csdn.net/ccpat/article/details/45507751
Android判断点是否在view内
上代码吧,获取时机大家都知道,用post,绘制完成后处理。
fun View.calcViewScreenLocation(): Rect {
val location = IntArray(2)
// 获取控件在屏幕中的位置,返回的数组分别为控件左顶点的 x、y 的值
getLocationOnScreen(location)
return Rect(location[0], location[1], location[0] + width,
location[1] + height);
}
fun View.containPoint(pointX: Int, pointY: Int): Boolean {
return calcViewScreenLocation().contains(pointX, pointY)
}
传入手指点击坐标即可。event.rawX, event.rawY。
本站由以下主机服务商提供服务支持:
0条评论