1. 程式人生 > >2017-02-28-一個好用的Android比例自動適配的庫

2017-02-28-一個好用的Android比例自動適配的庫

今天刷github的時候發現一個鴻神寫的很牛逼的適配庫——AndroidAutoLayout.
剛好公司需要適配不同大小的螢幕,就簡單試用了一下,感覺不錯.整合簡單,支援的控制元件廣泛,使用靈活,雖然已經是15年寫的了,但是現在用起來也沒有發現什麼衝突和崩潰.所以寫到部落格上推薦給大家.

優勢

這個庫實現的最方便的功能是:我們拿到UI部門給出的以px為單位標註的設計圖後,直接照抄上面的px尺寸就能寫出一套適配於所有解析度的xml layout.不僅免去了對著設計圖把px轉成dp的麻煩,而且也不用為不同的螢幕編寫多套layout.很有一套UI打遍天下的感覺.
而且使用這個庫理論上完全可以使用一個FrameLayout,裡面的view使用margin定位,不用巢狀就能完成UI,對UI效率也有很大提升.

原理

簡單學習了一下原始碼,這個庫的核心思想是,事先按照設計圖設定好設計圖的寬高(design_width/design_height),然後把設計圖上所有控制元件的px尺寸按原單位px填入xml檔案中,最終這個庫會根據設計圖總體尺寸和控制元件尺寸,算出控制元件在設計圖上佔的寬高比,再根據實際螢幕大小動態放大或縮小控制元件以保證控制元件在實際螢幕上佔的比例和在設計圖上佔的比例一致.

這種按比例縮放的方法不僅可以用在控制元件本身的大小上,也可以同理應用到控制元件的margin/padding/textSize等跟大小相關的屬性上,統一縮放以後,在不同的螢幕上顯示的效果就都跟設計圖上一致了.

使用

1.首先新增庫引用.

dependencies {
    compile 'com.zhy:autolayout:1.4.5'
} 

2.在專案的AndroidManifest中註明設計稿的尺寸。

<meta-data android:name="design_width" android:value="768">
</meta-data>
<meta-data android:name="design_height" android:value="1280">
</meta-data>

3.介面的改動.
- Activity介面的用法

讓Activity繼承AutoLayoutActivity

public class MainActivity extends AutoLayoutActivity {

.......

}
  • Fragment介面的用法

在onCreateView生成返回生成的view之前使用AutoUtils重新計算view的大小(一定要在對view的全部處理完成後再調整大小).

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(.......);
    .........
    .........
    AutoUtils.autoSize(view);
    return view;
}
  • 動態生成的view的用法

以上兩種都是對xml中寫好的靜態的layout進行大小適配的用法.如果需要動態生成view,比如生成頁碼按鈕,新增到頁碼容器中,需要在生成結束後,新增到容器之前呼叫AutoUtils進行大小調整.

//動態生成pageBtn,並且動態設定寬高間隔等
TextView pageBtn = new TextView(getApplicationContext());
pageBtn.setPadding(10 , 20 , 30 , 40);
pageBtn.setTextSize(25);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40 , 40);
layoutParams.setMargins(10 , 20 , 30 , 40);

//在全部生成完畢後,新增至容器之前調整大小.
AutoUtils.autoSize(pageBtn);

pageBtnContainer.addView(pageBtn , layoutParams);

做完之後,記得把dp換成px,大小換成跟設計圖上標註的一樣的px值.
整合完畢,適配完成,就這麼簡單~

其他

感謝張鴻陽大神提供這麼好用的庫.

以上介紹中還附上了許多進階用法,學習中…