LinearLayout 一個非常有用的擴展

項目地址:GitHub
經(jīng)常能碰到這樣一種需求:

    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,他們應(yīng)該縮小的量是:
- A = overflowSize * 1 / 6
- B = overflowSize * 2 / 6
- C = overflowSize * 3 / 6

但是還有個問題,如果 C 的高度小于 overflowSize * 3 / 6,則要繼續(xù)給 A 和 B 分配剩余的高度,直到把 overflowSize 分配完,所以這里要用遞歸處理
另外還要處理 View 之間的 margin 和 水平還是垂直的 LinearLayout
最終效果請查看 GitHub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運行工作負責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,468評論 0 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,621評論 1 32
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 選擇題部分 1.(),只有在發(fā)生短路事故時或者在負荷電流較大時,變流器中才會有足夠的二次電流作為繼電保護跳閘之用。...
    skystarwuwei閱讀 14,354評論 0 7
  • 由于一直處于報廢的狀態(tài),想來想去,今天跟老大提了這周組織分享技術(shù)的事情。一是想逼自己被動學(xué)習(xí),我這人必須要有壓力才...
    小興nice閱讀 184評論 0 0

友情鏈接更多精彩內(nèi)容