ViewUtils
来源:互联网 发布:java简历专业技能 编辑:程序博客网 时间:2024/05/16 07:52
项目 ViewUtils的总结:
这些类最大的作用是消除code duplicate,以及屏蔽实现细节,对于android这种API经常
变的平台,Utils包装细节可以很好的和系统版本解耦。
计划将这些Utils类整理一下维护到自己的github上去<早该搞了,自己的github上几乎全是Fork......>,以后不用再重新发明轮子。
<1>提供一个oneshot的onLayout Listener,并将其加到View上,这个需求在项目中
的频率不高,不过View本身并没提供这样的Listener<只提供了onLayoutChangeListner>,
总不能为了监听onLayout而将View extends就为了override onLayout(), 所以利用ViewTreeOberver的OnGlobalLayoutListener实现了这个效果,因为是oneShot,那么在Listner
被调用的时候,就要将自己从ViewTreeOberver的listner中移除,
这里有个API兼容问题,GOOGLE蛋疼,在JB以下版本,是removeGlobalOnLayoutListener,在JB及以上是removeOnGlobalLayoutListener.........
<2>对于某个API兼容问题比较多的版本,会在里面再声明一个XXXCompat来封装其独有的方法,这样做的好处是直接在该class上加一个@TargetApi就够用了。
<3>硬件加速是否打开的判断:只有在 >= HC的情况下才有可能打开,真正判断是canvas的
isHardwareAccelerated()。
<4>设置View的background,GOOGLE继续做死,在>=JB,是setBackground(drawable),其他的是
setBackgroundDrawable(drawable)
<5>Rset View的MarginStart/End<基本和left/right一样,不过要考虑阅读语序>,在 >=JB_MR1时,直接设置View的LayoutParams的MarginStart/End: setMarginStart/End
(Integer.MIN_VALUE);
其他情况则需要调用反射来设置属性startMargin/endMargin。
<6>禁止多触摸点: >=HC 直接调用ViewGroup setMotionEventSplittingEnabled(false),以下版本默认就是不支持多触摸.
<7>设置View 的 VISIBLITY, 如果 SDK < HC, 那么设置前要 clearAnimation<这是一个著名的bug,不clear Animation, View永远可见,即使设了不可见>,否则如果要设置的VISIBLITY不是visible 那么还需要将View的alpha设为1<这是因为某些时候使用的Animation会调整View的alpha,因此在其被调整为不可见时,会将其alpha值reset为1>. 最后才执行原生setVisiblity。
<8>generateViewId, 这个功能个人用的很少,只有在 >=JB_MR1,才有直接的原生实现,否则,
参考这个实现: http://stackoverflow.com/questions/6790623/#21000252
这些类最大的作用是消除code duplicate,以及屏蔽实现细节,对于android这种API经常
变的平台,Utils包装细节可以很好的和系统版本解耦。
计划将这些Utils类整理一下维护到自己的github上去<早该搞了,自己的github上几乎全是Fork......>,以后不用再重新发明轮子。
这是另外一个哥们总结的,挺全。
http://blog.csdn.net/lmj623565791/article/details/38965311
<1>提供一个oneshot的onLayout Listener,并将其加到View上,这个需求在项目中
的频率不高,不过View本身并没提供这样的Listener<只提供了onLayoutChangeListner>,
总不能为了监听onLayout而将View extends就为了override onLayout(), 所以利用ViewTreeOberver的OnGlobalLayoutListener实现了这个效果,因为是oneShot,那么在Listner
被调用的时候,就要将自己从ViewTreeOberver的listner中移除,
这里有个API兼容问题,GOOGLE蛋疼,在JB以下版本,是removeGlobalOnLayoutListener,在JB及以上是removeOnGlobalLayoutListener.........
<2>对于某个API兼容问题比较多的版本,会在里面再声明一个XXXCompat来封装其独有的方法,这样做的好处是直接在该class上加一个@TargetApi就够用了。
<3>硬件加速是否打开的判断:只有在 >= HC的情况下才有可能打开,真正判断是canvas的
isHardwareAccelerated()。
<4>设置View的background,GOOGLE继续做死,在>=JB,是setBackground(drawable),其他的是
setBackgroundDrawable(drawable)
<5>Rset View的MarginStart/End<基本和left/right一样,不过要考虑阅读语序>,在 >=JB_MR1时,直接设置View的LayoutParams的MarginStart/End: setMarginStart/End
(Integer.MIN_VALUE);
其他情况则需要调用反射来设置属性startMargin/endMargin。
<6>禁止多触摸点: >=HC 直接调用ViewGroup setMotionEventSplittingEnabled(false),以下版本默认就是不支持多触摸.
<7>设置View 的 VISIBLITY, 如果 SDK < HC, 那么设置前要 clearAnimation<这是一个著名的bug,不clear Animation, View永远可见,即使设了不可见>,否则如果要设置的VISIBLITY不是visible 那么还需要将View的alpha设为1<这是因为某些时候使用的Animation会调整View的alpha,因此在其被调整为不可见时,会将其alpha值reset为1>. 最后才执行原生setVisiblity。
<8>generateViewId, 这个功能个人用的很少,只有在 >=JB_MR1,才有直接的原生实现,否则,
参考这个实现: http://stackoverflow.com/questions/6790623/#21000252
0 0
- ViewUtils
- xUtils ViewUtils 用法
- ViewUtils模块的使用
- 注解:xUtils之----ViewUtils
- Xutils之ViewUtils解析
- xUtils2.x(ViewUtils)
- ViewUtils 扩展类问题
- xutils3:ViewUtils.inject,没有inject方法或者没有ViewUtils类
- ViewUtils for com.lidroid.xutils
- Android xUtils框架(二) ViewUtils
- xUtils中viewUtils的使用
- xUtils系列之ViewUtils-概览
- Android xUtils框架(二) ViewUtils
- android客户端学习-ViewUtils
- Android ViewUtils注解框架自定义
- XUtils之ViewUtils和DBUtils
- xUtils介绍 -- DbUtils、ViewUtils、HttpUtils、BitmapUtils
- XUtil学习笔记之ViewUtils(二)
- HandLer的用法
- C++系统自动生成默认构造函数的情况
- 一个比较完整的CString类
- The Linux device model
- 第4篇 观察者模式
- ViewUtils
- 代码混淆
- Access denied for user 'root'@'localhost'
- 关于两个jar包中存在包名和类名都完全相同的jar包冲突问题
- 【经验之谈】适合学习的IT教程网站列表
- Linux网络编程--7. TCP/IP协议
- vim小技巧
- Android之Activity与Service通信
- Android自动登录 记住用户名密码实现 SharedPreferences