- 自定义MaxHeightLayout,限制popWindow数据过多的时候最大高度。
- 了解BottomSheet。
- 了解ConstraintLayout。
- 研究了一下自定义View的三个构造函数。
从上面Activity事件分发机制可知,ViewGroup事件分发机制从dispatchTouchEvent()开始
从上面ViewGroup事件分发机制知道,View事件分发机制从dispatchTouchEvent()开始
如果一个View的可见性不是visible,并且view也没有与之关联的动画,那么他是收不到事件的 下面的代码摘自ViewGroup
/**
* Returns true if a child view can receive pointer events.
* @hide
*/
private static boolean canViewReceivePointerEvents(@NonNull View child) {
return (child.mViewFlags & VISIBILITY_MASK) == VISIBLE
|| child.getAnimation() != null;
}
【Andorid源码解析】View.post() 到底干了啥
遍历View树
fun printAllChildView(view: View) {
Log.i(TAG, "printAllChildView: ")
val queue: Deque<View> = LinkedList<View>()
var root = view
queue.add(root)
while (queue.isNotEmpty()) {
root = queue.pop()
Log.i(TAG, "printAllChildView: $root")
if (root is ViewGroup) {
for (i in 0 until root.childCount) {
queue.add(root.getChildAt(i))
}
}
}
}
-
无论是显示软键盘时指定的flag,还是隐藏软键盘时指定的flag都只对隐藏软键盘有影响,对显示软键盘无影响
-
分别在调用showSoftInput()时使用三个不同的标记,以及在调用hideSoftInputFromWindow()是使用三个不同的标记,对是否能够隐藏软键盘进行测试,测试结果如下。true表示可以隐藏,false表示不能隐藏。
横向表示显示软键盘传入的flag,竖向表示隐藏键盘传入的flag
参数 | 0 | SHOW_IMPLICIT | SHOW_FORCED |
---|---|---|---|
0 | true | true | true |
HIDE_IMPLICIT_ONLY | false | true | false |
HIDE_NOT_ALWAYS | true | true | false |
-
如果在xml文件中指定的单位是 dp,或者 sp的话 getDimension()、getDimensionPixelSize()和getDimenPixelOffset()的结果值都是将资源文件中定义的dip值乘以屏幕密度。
-
如果在xml文件中指定的单位是px的话,那么getDimension()、getDimensionPixelSize()和getDimenPixelOffset()的结果值都是将资源文件中定义的px值。
-
getDimension()返回值类型是的是float,其余两个返回的是int。 其中getDimensionPixelSize()返回的是实际数值的四舍五入,而getDimensionPixelOffset返回的是实际数值去掉后面的小数点;
getDimension()、getDimensionPixelSize()和getDimensionPixelOffset()的区别
/**
* Constant for {@link #getActionMasked}: The current gesture has been aborted.
* You will not receive any more points in it. You should treat this as
* an up event, but not perform any action that you normally would.
*/
public static final int ACTION_CANCEL = 3;