展望未来

未来是美好的,也是不确定的,让我们共同期待 Hikage 在未来的发展空间。

未来的计划

这里收录了 Hikage 可能会在后期添加的功能。

处理 AttrtibuteSet

Hikage 未来将会支持处理 AttributeSet 来对接 XML 原始的属性以实现接管一些并未在代码中对布局属性开放自定义的第三方组件。

Hikage 目前已经支持自动化创建 XmlBlock,但尚未支持直接处理自定义的 AttributeSet,因为其历史遗留问题和处理难度较高,可能会折中考虑后期是否要继续完善此功能。

示例如下

TextView(
    id = "text_view",
    // 通过 AttributeSet 传入的属性
    attrs = {
        namespace("android") {
            set("text", "Hello, World!")
            set("textSize", "16sp")
            set("gravity", "center")
        }
    }
) {
    // 通过代码传入的属性
    text = "Hello, World!"
    textSize = 16f
    gravity = Gravity.CENTER
}

生成组件 ID

Hikage 未来可能会根据需求支持生成使用字符串自定义的组件 ID 的直接调用功能。

示例如下

object MyLayout : HikageBuilder {

    override fun build() = Hikageable(context) {
        LinearLayout(
            id = "lin_layout",
            lparams = LayoutParams(matchParent = true),
            init = {
                orientation = LinearLayout.VERTICAL
                gravity = Gravity.CENTER
            }
        ) {
            TextView(id = "text_view") {
                text = "Hello, World!"
                textSize = 16f
                gravity = Gravity.CENTER
            }
        }
    }
}

val context: Context
// 创建 TypedHikage
val myLayout = MyLayout.asTyped().build().create(context)
// 或者,使用懒加载
val myLayout by context.lazyTypedHikage(MyLayout)
// 直接调用根据字符串生成的 ID
val linLayout = myLayout.linLayout
val textView = myLayout.textView
// 获取根布局,即 LinearLayout
val root = myLayout.root