LinearLayout 一个非常有用的扩展

项目地址:GitHub
经常能碰到这样一种需求:

    1. A 和 B 依次排开,B 必须紧贴着 A 的底部,这个好做,用线性排列就可以
    1. 在小屏幕上如果空间不足则 A 等比例缩小,B 不能缩小,这个也好做,用 RelativeLayout 让 A 相对于 B 的上方显示

但是要同时满足这两条要求就很麻烦,只能自己写个自定义布局处理,思路是这样的:

  1. 首先,给子 View 加标记:shirk 0 代表不缩放,值越大缩放速度越快,如果有多个要缩放的子 View 则按照 shirk 比例分配缩放量
  2. 然后在开始测量时先计算子 View 整体高度和,如果高度和小于父亲的高度,则不用处理
  3. 如果高度大于父亲的高度,则算出需要缩小的量 overflowSize = 子 View 高度和 - 父 View 高度,按照比例分配给子 View,比如子 View A, B, C 的 shirk 分别为 1,2,3,他们的高度和超出父 View 的高度为 overflowsSize,他们应该缩小的量是:
- A = overflowSize * 1 / 6
- B = overflowSize * 2 / 6
- C = overflowSize * 3 / 6

但是还有个问题,如果 C 的高度小于 overflowSize * 3 / 6,则要继续给 A 和 B 分配剩余的高度,直到把 overflowSize 分配完,所以这里要用递归处理
另外还要处理 View 之间的 margin 和 水平还是垂直的 LinearLayout
最终效果请查看 GitHub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 13,341评论 0 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,906评论 1 32
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,922评论 0 17
  • 选择题部分 1.(),只有在发生短路事故时或者在负荷电流较大时,变流器中才会有足够的二次电流作为继电保护跳闸之用。...
    skystarwuwei阅读 14,779评论 0 7
  • 由于一直处于报废的状态,想来想去,今天跟老大提了这周组织分享技术的事情。一是想逼自己被动学习,我这人必须要有压力才...
    小兴nice阅读 1,346评论 0 0

友情链接更多精彩内容