AutoLayout根布局適配問題

2021-07-30 19:31:38 字數 1919 閱讀 7903

弘洋大大的ui適配庫,實現了在不同裝置上的自動適配,非常方便

遇到的問題:

在layoutinflater.from(getcontext()).inflate(resource,parent,false),根布局即parent自身的數值不被轉化

關於inflate(getcontext(), resource, null)和inflate(resource,parent,false)瞧下方鏈結

android應用效能優化系列檢視篇——layoutinflater使用的正確姿勢

先看item的根布局

.zhy

.autolayout

.autolinearlayout

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="200px"

android:background="@color/yellow"

android:orientation="horizontal">

"@+id/iv_ic"

android:layout_width="20sp"

android:layout_height="20sp"

android:src="@mipmap/ic_launcher"

android:visibility="gone"/>

"@+id/tv_test"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="測試資料"

android:textsize="15sp"

android:visibility="gone"

/>

.zhy

.autolayout

.autolinearlayout

android:layout_width="match_parent"

android:layout_height="50px"

android:background="#ff0000">

com.zhy

.autolayout

.autolinearlayout>

com.zhy

.autolayout

.autolinearlayout>

準備了1080*1920和768*1280兩個解析度的裝置,下圖是不做任何處理的結果如下圖(1080*1920為左圖,768*1280為右圖)

關鍵看右邊兩個方法,都是獲取當前裝置的寬/高,與設計尺寸的寬/高做對比,得到比例乘以具體數值val,如不整除,則+1

ps:這也是為什麼我當初測試的時候單純的用高的比例乘以數值來動態設定字型大小的時候,有時候會有細微的偏差

pps:usedefault()和basewidth()方法可看具體原始碼,是通過是否設定自定義屬性作為基準來取寬的比例或者高的比例(某些屬性如字型大小是預設取的高之比,可自己改為寬之比)

那麼知道了上述原始碼以後,還會發現autoutils類裡還有乙個方法

看注釋也知道了可以手動把view進行百分比處理

那麼只要在自己的**中手動呼叫就好了

這下兩個解析度不同的裝置都達到了適配

結論:inflate(resource,parent,false)後,的確讀取了根布局的高,但是autolayout真正百分比化並不是從根布局開始的,所以為了達到布局降級的目的,可採用autoutils.auto(view)

自動布局 Autolayout

簡介 在以前的ios程式中,是如何設定布局ui介面的?經常編寫大量的座標計算 為了保證在3.5 inch和4.0 inch螢幕上都能有完美的ui介面效果,有時還需要分別為2種螢幕編寫不同的座標計算 即傳說中的 螢幕適配 什麼是autolayout?autolayout是一種 自動布局 技術,專門用來...

AutoLayout自動布局

autolayout 自動布局 入門 這是博主的wwdc2012筆記系列中的一篇,完整的筆記列表可以參看這裡。如果您是首次來到本站,也許您會有興趣通過rss,或者通過頁面左側的郵件訂閱的方式訂閱本站。autolayout是一種基於約束的,描述性的布局系統。auto layout is a const...

Autolayout自動布局3

不要將autoresizingmask轉為autolayout的約束 blueview.translatesautoresizingmaskintoconstraints no uiview redview uiview alloc init self.view addsubview redview...