新项目中,使用了NavigationDrawer 控件来做侧边栏。第一次使用NavigationDrawer,
踩坑是必不可少的。下面,来展示 NavigationDrawer 不需要自定义来快速修改布局。算是一种黑科技吧。
NavigationDrawer使用详解
http://www.jianshu.com/p/c8cbeb7ea43a
(作者提出)不实用的 NavigationView 一个观点
下面,就用黑科技来把不实用变成实用。
最开始,网上搜到的也是一堆的自定义view继承,把一些不可控制的属性放出来,变成可控。
其实 NavigationView 的各种事件,已经满足我们的需求了。我们的需求,也就是产品经理的想要的,
是希望具有她想象中的美感而已。经常被ui折腾个半死。
NavigationDrawer单个属性修改dimen
@Override
public void initForMenu(Context context, MenuBuilder menu) {
mLayoutInflater = LayoutInflater.from(context);
mMenu = menu;
Resources res = context.getResources();
mPaddingSeparator = res.getDimensionPixelOffset(
R.dimen.design_navigation_separator_vertical_padding);
}
在NavigationView源码中,看到这样一段代码,猜测,NavigationView 的一个属性,然后跟进去。
进dimen文件中查询这个值。
<dimen name="design_navigation_elevation">16dp</dimen>
然后直接复制这个名字到本地的 dimen 文件中,将值改为100dp。编译运行,发生强烈的化学反应。
改用as后,自己写过module,打包过aar, aar 中的图片会被 本地重名的 图片资源所代替。一个道理,
那重名的属性,应该也会覆盖。这边算想法测试成功。
接下来,继续把黑科技放大。
如果图片资源可以替代,命名属性可以替代,那我整个view是不是也可以替代。
NavigationDrawer整个view 修改
又是猜想,中间是一样的item,应该是个adapter。layout 中找一下
看名字
design_navigation_item.xml
二话不说,ctrl c ctrl v
design_navigation_item.xml
摸摸在布局中加了一行代码 ,shift F10
android:paddingLeft="10dp"
猜想成功。。。幸福来的太突然。
总结
1、使用范围:不改变 view 的具体代码逻辑,只修改 xml。(其他view一个道理)
为什么是 xml。当然还有动画拉!!!! 下个目标,修改侧拉动画成 ios 某种效果。
2、道行不够,编译过程,为什么资源会被替换,希望知道的前辈能回答下。
自己写代码的时候,注意一下规范,造福他人。
3、打个广告,微视频(名字暂定),下周估计上线,navigation 自定义布局。太丑怪产品!
4、android 研究群:194802363。 我tm 也是管理好几百号人的管理员。
5、福州地区有好的项目的可以联系。
爱他就让他学android,恨他也让他学android。