Skip to content

文本,图标,指示器宽度属性生效说明

angcyo edited this page Jul 6, 2023 · 1 revision

文本 图标相关属性生效说明

当配置了文本 图标 相关属性时:

<!--item选中时 文本的颜色-->
<attr name="tab_select_color" format="color" />
<!--item未选中时 文本的颜色-->
<attr name="tab_deselect_color" format="color" />
<!--选中时 图标(Drawable)的颜色, 默认是文本的颜色-->
<attr name="tab_ico_select_color" format="color" />
<!--未选中时 图标(Drawable)的颜色, 默认是文本的颜色-->
<attr name="tab_ico_deselect_color" format="color" />

为了使属性生效, 库需要定位item childView中的 TextView ImageView.

如果配置了id属性, 则优先使用id定位对应需要的控件:

<!--指定文本控件的id, 所有文本属性改变, 将会发生在这个控件上, 如果指定的控件不存在, 控件会降权至[ItemView]-->
<attr name="tab_text_view_id" format="reference" />
<!--指定图标控件的id, 同上-->
<attr name="tab_icon_view_id" format="reference" />

如果未指定, 则降级为, 在com.angcyo.tablayout.DslTabLayout.LayoutParams属性中的:

<!--单独指定child的锚点索引-->
<attr name="layout_tab_indicator_content_index" format="integer" />
<!--单独指定child的锚点控件的id-->
<attr name="layout_tab_indicator_content_id" format="reference" />

这2个属性中获取.

如果这2个属性, 依旧未匹配到, 则再次降级为判断当前的childView是否就是TextViewImageView.

如果还是没有匹配到对应的控件, 则属性不会生效.

如果不想再xml中配置, 则可以通过代码控制, 实现2个关键方法即可:

com.angcyo.tablayout.DslTabLayout#configTabLayoutConfig

configTabLayoutConfig {
    onGetTextStyleView = { itemView, _ ->
                
    }
    onGetIcoStyleView = { itemView, _ ->
                
    }
}

指示器宽度属性生效说明

指示器的宽度属性取值如下: 可以是固定的dp大小, 这个无可厚非.

<!--指示器的宽度-->
<attr name="tab_indicator_width" format="dimension|flags">
        <flag name="WRAP_CONTENT" value="-2" />
        <flag name="MATCH_PARENT" value="-1" />
</attr>

指示器的宽度是WRAP_CONTENTMATCH_PARENT时, 那么就需要找到匹配的锚点View, 才能生效.

当指定了以下2个属性之一时, 那么会优先使用对应的view作为指示器的锚点View, 否则降级为childView.

<!--单独指定child的锚点索引-->
<attr name="layout_tab_indicator_content_index" format="integer" />
<!--单独指定child的锚点控件的id-->
<attr name="layout_tab_indicator_content_id" format="reference" />

注意tab_indicator_ignore_child_padding属性可以在计算指示器WRAP_CONTENT时,忽略viewpadding值, 但是margin值依旧有效.