就在昨天,我的一个项目DropDownMenu被daimajia的干货网站推荐,一天之内有了200多个star,上了github java分类的头条,有些激动(在这个板块关注了一年多,终于能看到自己的项目在上面),也有些惶恐(怕自己水平不够,会误导大家),总而言之还是很高兴的,截了张图片纪念一下,也希望以后大家多多关注支持我创作
效果还是很赞的,看下动态图
simple.gif
这个项目是我在2015年7月份左右写的,时隔半年,终于有人问津,但时隔半年,也感到这个项目有许多的不足之处,怀着激动的心情今天来讲解并完善这个项目。
选择实现方式
若是看到第一眼让我做这个效果,我肯定会选择PopuWindow去做,PopuWindow可以实现显示隐藏效果也自带阴影效果,看上去是不错的选择,网上也有类似库DropDownMenu就是利用PopuWindow实现,但事实上在菜单切换的时候会很不流畅(用的不爽),思维局限的时候容易钻死角,尝试过甚至自定义PopuWindow,最后都毫无办法改善那点问题,最后在网上偶遇一个demo使用View的显示隐藏加些动画效果就解决了我的难题,最终我放弃使用PopuWindow,利用最基本的布局实现了这个项目。
当遇到难题束手无策时,不妨暂且放下,待思路清晰时,或许它根本就不是个问题
这个项目做了哪些,没做哪些?
这个项目并没有实现菜单及里面的逻辑,仅仅提供了一套实现菜单的框架,菜单的样式可完全自定义,目的是为了快速集成,又可扩展(实用),在很多时候,选择开源框架我会将扩展性放在首位,不然再好看再炫我都不会轻易使用,当然,既炫又实用的东西我是不会嫌弃的。
实现思路
其实这个项目可以直接使用Xml布局实现,结构是这样的
QQ截图20160110112344.png
嗯,大概的结构就是这个样子,但使用xml文件有个弊端,tab的个数不可以动态控制,menu也是一样,tab包括menu和之间的切换和动画处理起来都比较麻烦,我才有意将其封装为独立控件,只需在一处集中处理这些麻烦,提供简单易用的api。
一些改进想法
- menu之间的切换支持手势
- menu底部留白
- tab可滑动
- 可使用xml文件布局,却不需要处理其他问题
-
更灵活的api
新版的DropDownMenu,敬请期待,预览图:
dropdownmenunew.gif
github:DropDownMenu
欢迎star、fork 、issues
网友评论
我的布局文件是一个垂直的LinearLayout,<com.yyydjk.library.DropDownMenu/>下面就是一个<android.support.v7.widget.RecyclerView/>,当我点击DropDownMenu中的某一个tab时,下面的RecyclerView列表要么侵占DropDownMenu下拉GridView的一部分空间,要么就是将RecyclerView列表彻底挤出屏幕空间。
请问,这种情况时,该如何设置contentView的属性或者有什么其它方式能够解决问题,万分感谢!
我将你的DropDownMenu放入ViewPager的一个fragment页面的顶部,当我使用ViewPager下fragment界面的跳转(懒加载)时,出现错误:
java.lang.IllegalArgumentException: params not match, tabTexts.size() should be equal popupViews.size()。
tabText的尺寸应该和popupViews的尺寸一样,是什么意思?
怎样解决?
这个错误,求助,怎么解决?
提点小建议:
可以把更多一些方法暴露出来,比如 打开一个tab,openTabAtIndex(int index )
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.yyydjk.library.DropDownMenu" on path: DexPathList[[zip file "/data/app/com.jq.lwh-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.jq.lwh-2, /vendor/lib, /system/lib]] 这是什么情况
mDropDownMenu.setTabText(strages);
mDropDownMenu.setTabText(strsexs);
mDropDownMenu.setTabText(strconstellations);这样,不行诶。
app:ddmenuUnselectedIcon="@mipmap/drop_down_unselected_icon"//tab未选中状态图标
这两个属性
at android.content.res.Resources.getValue(Resources.java:1133)
at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:285)
at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:389)
at android.support.v7.widget.TintResources.getDrawable(TintResources.java:48)
at com.yyydjk.library.DropDownMenu.addTab(DropDownMenu.java:151)
at com.yyydjk.library.DropDownMenu.setDropDownMenu(DropDownMenu.java:116)
http://blog.csdn.net/u011733020/article/details/51002746