万能适配,百分比布局,支持padding
来源:互联网 发布:python smtplib 安装 编辑:程序博客网 时间:2024/06/05 07:12
本文是基于http://blog.csdn.net/lmj623565791/article/details/46767825的修改,介绍及使用,请按左侧链接参拜鸿洋大神。
因自己使用中,发现不支持padding,所以自己谢了几行代码,非常简单,但肯定有人懒得写,想直接拿来用,OK,请直接下载来用,包名改改就可以了
https://github.com/zhengvince/PersentLayout
如果有大神乐意优化和修改,请不要客气,可以直接在gitHub叉一份,若大神想在自己的github上优化
请优化了在下面或鸿洋大神博客下面留个地址,大家一起优化的更好用
如下细节请注意:
1. 如果所有子控件,全部是百分比布局,可能因为四舍五入,有1dp的空白,暂时凑合的办法:至少有一个控件,设为mach_parent
2. 比例设置20%h,是参考其父级容器,而非根容器
3. 只支持paddingLeft,paddingRight,paddingBottom,paddingTop,不支持paddingStart,paddingEnd,原谅我吧,新手,实在不明白start和end是干什么用的。
4. 本人新手,刚接触android1个月,代码如有各种低级错误,请看在我直接提供源码的份儿上,直接留言,不要客气,谢谢。
原理也很简单:
1. 在attrs.xml中添加自定义属性
<attr name="layout_paddingPercent" format="string"/> <attr name="layout_paddingLeftPercent" format="string"/> <attr name="layout_paddingTopPercent" format="string"/> <attr name="layout_paddingRightPercent" format="string"/> <attr name="layout_paddingBottomPercent" format="string"/>
2. 在 PercentLayoutHelper 中的PercentLayoutInfo添加变量名
//1.0.5 those attr for some views' set percent layout_padding method public PercentVal leftPaddingPercent; public PercentVal topPaddingPercent; public PercentVal rightPaddingPercent; public PercentVal bottomPaddingPercent;3. 在 PercentLayoutHelper 中的 getPercentLayoutInfo 获取自定义属性的值
//paddingPercent sizeStr = array.getString(R.styleable.PercentLayout_Layout_layout_paddingPercent); percentVal = getPercentVal(sizeStr, false); if (percentVal != null) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "percent padding: " + percentVal.percent); } info = checkForInfoExists(info); info.leftPaddingPercent = getPercentVal(sizeStr, true); info.topPaddingPercent = getPercentVal(sizeStr, false); info.rightPaddingPercent = getPercentVal(sizeStr, true); info.bottomPaddingPercent = getPercentVal(sizeStr, false); } sizeStr = array.getString(R.styleable.PercentLayout_Layout_layout_paddingLeftPercent); percentVal = getPercentVal(sizeStr, true); if (percentVal != null) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "percent left padding: " + percentVal.percent); } info = checkForInfoExists(info); info.leftPaddingPercent = percentVal; } // value = array.getFraction(R.styleable.PercentLayout_Layout_layout_paddingTopPercent, 1, 1, // -1f); sizeStr = array.getString(R.styleable.PercentLayout_Layout_layout_paddingTopPercent); percentVal = getPercentVal(sizeStr, false); if (percentVal != null) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "percent top padding: " + percentVal.percent); } info = checkForInfoExists(info); info.topPaddingPercent = percentVal; } // value = array.getFraction(R.styleable.PercentLayout_Layout_layout_paddingRightPercent, 1, 1, // -1f); sizeStr = array.getString(R.styleable.PercentLayout_Layout_layout_paddingRightPercent); percentVal = getPercentVal(sizeStr, true); if (percentVal != null) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "percent right padding: " + percentVal.percent); } info = checkForInfoExists(info); info.rightPaddingPercent = percentVal; } //value = array.getFraction(R.styleable.PercentLayout_Layout_layout_paddingBottomPercent, 1, 1, // -1f); sizeStr = array.getString(R.styleable.PercentLayout_Layout_layout_paddingBottomPercent); percentVal = getPercentVal(sizeStr, false); if (percentVal != null) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "percent bottom padding: " + percentVal.percent); } info = checkForInfoExists(info); info.bottomPaddingPercent = percentVal; }
4. 在 PercentLayoutHelper 自定义方法supportPadding,设置view的padding;
/** * 支持padding */ private void supportPadding(int widthHint, int heightHint, View view, PercentLayoutInfo info) { int leftPadding = view.getPaddingLeft(); int rightPadding = view.getPaddingRight(); int topPadding = view.getPaddingTop(); int bottomPadding = view.getPaddingBottom(); PercentLayoutInfo.PercentVal leftPaddingPercent = info.leftPaddingPercent; PercentLayoutInfo.PercentVal topPaddingPercent = info.topPaddingPercent; PercentLayoutInfo.PercentVal rightPaddingPercent = info.rightPaddingPercent; PercentLayoutInfo.PercentVal bottomPaddingPercent = info.bottomPaddingPercent; Log.d("percentPadding","----------"+view+"----------------"); Log.d("percentPadding", " widthHint = " + widthHint + " "); Log.d("percentPadding", " heightHint = " + heightHint + " "); if (leftPaddingPercent != null) { int base = leftPaddingPercent.isBaseWidth ? widthHint : heightHint; leftPadding = (int) (base * leftPaddingPercent.percent); Log.d( "percentPadding"," leftPaddingPercent = " + leftPaddingPercent.percent + " "); } if (topPaddingPercent != null) { int base = topPaddingPercent.isBaseWidth ? widthHint : heightHint; topPadding = (int) (base * topPaddingPercent.percent); Log.d("percentPadding"," topPaddingPercent = " + topPaddingPercent.percent + " "); } if (rightPaddingPercent != null) { int base = rightPaddingPercent.isBaseWidth ? widthHint : heightHint; rightPadding = (int) (base * rightPaddingPercent.percent); Log.d("percentPadding"," rightPaddingPercent = " + rightPaddingPercent.percent + " "); } if (bottomPaddingPercent != null) { int base = bottomPaddingPercent.isBaseWidth ? widthHint : heightHint; bottomPadding = (int) (base * bottomPaddingPercent.percent); Log.d("percentPadding", " bottomPaddingPercent = " + bottomPaddingPercent.percent + " "); } if (leftPaddingPercent != null || topPaddingPercent != null || rightPaddingPercent != null || bottomPaddingPercent != null) { view.setPadding(leftPadding, topPadding, rightPadding, bottomPadding); Log.d( "percentPadding"," leftPadding = " + leftPadding + " "); Log.d("percentPadding"," topPadding = " + topPadding + " "); Log.d("percentPadding"," rightPadding = " + rightPadding + " "); Log.d("percentPadding"," bottomPadding = " + bottomPadding + " "); } }
5. 在 PercentLayoutHelper 中的 adjustChildren 调用上面的自定义方法;
2 0
- 万能适配,百分比布局,支持padding
- Android 支持百分比布局
- Android支持百分比布局
- 百分比布局支持库
- Android百分比布局支持库
- 百分比布局支持的属性
- CSS百分比padding实现比例固定图片自适应布局
- Android屏幕适配,百分比布局
- Android屏幕适配,百分比布局
- android百分比布局学习,适配相关
- Android适配之百分比布局
- 屏幕适配和百分比布局
- android支持百分比的屏幕适配
- Android 百分比布局支持库介绍
- Android 百分比布局支持库使用
- Android百分比布局Percent支持库
- Android百分比布局Percent支持库
- 让Android屏幕适配开发更简单-我就是传说中的Google百分比布局支持库
- 01背包 动态规划
- 精通Hibernate——理解HibernateSession缓存
- 堆和栈
- 黑马程序员——java复习总结——异常和包
- 九度oj 1014
- 万能适配,百分比布局,支持padding
- kd树
- FPGA奇数分频器
- 周赛 Hdoj To the Max
- hdu 1619 单向TSP Unidirectional TSP
- 仿oschina 主界面的实现(二) -------Toolbar + DrawerLayout
- 文件切割机
- http://blog.sina.com.cn/s/blog_777a9ccb01013maj.html
- 一个感染性木马病毒分析(三)--文件的修复