扩展第三方DropDownMenu

本文详述了如何扩展第三方DropDownMenu库,包括样式扩展和功能扩展。样式扩展通过XML加载视图并过滤设置,功能扩展允许在tabMenu中插入自定义tabView而不影响下拉功能。文中给出了关键代码修改及效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

找工作之际,静下心总结工作中的想法。

我的简书

原来的效果

Paste_Image.png

解析结构


  • 导读
    想要扩展首先我需要执行下面几个步骤

1.fork DropDownMenu到自己的github账号
2.使用as的vcs checkout出来
3.提交到github
4.发起pull request(还没发)

  • 源码实现原理
    作者对该控件的分析 导读

  • DropDwonMenu的结构.png

这是我对该DropDownMenu的组成结构进行的图解

DropDownMenu:下拉菜单控件 继承自LinearLayout
tabMenuView:顶部菜单布局 继承自LinearLayout
containerView:底部容器,包含popupMenuViews,maskView 继承自FrameLayout
popupMenuViews:弹出菜单父布局 继承自FrameLayout
maskView:遮罩半透明View,点击可关闭DropDownMenu 继承自View
contentView:一个页面除了顶部菜单栏以外的所有内容
tabView : ListView → 1 : 1

调用方法基本解析

DropDownMenu:对tabMenuView、containerView进行初始化
setDropDownMenu:传参为tabTexts(字符串数组),popupViews(ListView数组),contentView(内容View)。调用addtab方法向tabMenuView添加tabView并设置对应tabView点击切换显示ListView
addTab:循环tabTexts文本,TextView赋值添加到tabMenuView
switchMenu:切换tab调用对应的popupMenuViews里面的ListView显示,其他的ListView隐藏

一般情况下在我们的UI图不是对tab特别要求的话,那么这种已经符合要求了。但是奈不住它就是不长这样啊。
- tabView样式扩展
有时候UI图就是这么可恶,^这个箭头不是靠右,空的那么开。当然我这里只是举一个例子。

箭头居中而不是居最右
- tabView功能扩展
这个需求更加丧心病狂了,tab不都是下拉框。实现扩展之后可以在tabMenu中任意顺序插入自定义的tabView,且不影响下拉功能。

可以在tab位置中插入自己需要的tabView

代码实现细则

tabView样式扩展源码实现

这里我们说这个dropDownMenu的tab为TextView肯定无法达到我们想要的效果了。
那么最差将tab换成LinearLayout,那么自定义效果就随你自己了。但是我们就这样实现的话肯定性能跟原来有些差距。那么这个库tab都默认是viewGroup多渲染了一层,我们能不能在用的时候,自己定义的tab_item.xml。xml中我们想要viewGroup就写ViewGroup包裹,想只要TextView就只有TextView。
其实我们只需要定义id约束,xml中TextView必须指定为(例如)R.id.tv_tab。DropDownMenu底层在设置tab的内容的时候多一步操作,加载指定的tab_laytou.xml,然后如果是ViewGroup就findViewById找到TextView,否则就直接转成TextView。

1.addTab()方法从代码中直接new TextView改成从layout中加载
2.将原来tabView(textView)相关的设置代码全部先用获取textView的过滤方法筛选一下textView

这里只截取关键代码
原addTab()

    private void addTab(@NonNull List<String> tabTexts, int i) {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值