ARTS - 11

338 阅读1分钟

A


701. 二叉搜索树中的插入操作

描述: 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。

思路: 逐级向下对比,找到最后1个叶子结点,然后在叶子结点下一层插入即可。

这种思路下插入可能导致左右子树的不平衡,可以考虑平衡二叉树的插入。

R


Writing Performant Layouts

可能导致多次布局的情况:

  • layout_weight 的 LinearLayout 要对每个子 view 测量 2 次。
  • weights 或者 fill gravity 的 GridLayout 会失去预处理的好处。
  • RelativeLayout 至少要 2 次。

优化布局有如下方法:

重用布局

使用 <include> 是很常见的作法,但可能导致不必要的嵌套。

使用 <merge> 标签可以避免这种嵌套,并且通过 tools:parentTag 属性指明父 ViewGroup 的布局,这样在编辑器中的 UI 可以看上去像是包含在指定的 ViewGroup 中一样。

选择合适的布局

  • 复杂时 -> ConstraintLayout
  • 垂直/水平连续元素 -> LinearLayout
  • 视图之间可以叠加覆盖 -> FrameLayout
  • 避免使用 RelativeLayout

延迟加载 view

只在满足条件时才展示的 view ,可以使用 ViewStub 来延迟加载。

ViewStub 是1个轻量级 view ,不绘制或参与布局。

加载时通过调用 setVisibility(View.VISIBLE)inflate() 即可。

T


android ktx 中 androidx.core.animation 的方法:

inline fun Animator.addListener(
    crossinline onEnd: (animator: Animator) -> Unit = {}, 
    crossinline onStart: (animator: Animator) -> Unit = {}, 
    crossinline onCancel: (animator: Animator) -> Unit = {}, 
    crossinline onRepeat: (animator: Animator) -> Unit = {}
): AnimatorListener

可以简化对动画的监听设置。

S


没时间写……