首先是尺寸的適配肢扯,android平板和手機(jī)相比妒茬,由于pad的大屏特性,屏幕的尺寸和分辨率的差別就很明顯蔚晨,例如以下平板信息:
小米平板:4.4.4 densityDpi:320 size:1536x2048
華為平板:5.1.1 densityDpi:240 size:1200x1920
華為榮耀某平板:6.1 densityDpi:320 size:1200x1920
三星平板:6.0.1 densityDpi:320 size:1600x2560
同樣的一套mdpi下的layout或者values放在上面華為榮耀平板和三星平板上顯示差別就很大。下面是開發(fā)中關(guān)于設(shè)計(jì)的一些心得:
1.?開發(fā)中保持不增加布局層級(jí)的情況下采用百分比weight屬性铭腕;針對(duì)不同尺寸的設(shè)備百分比縮放是體驗(yàn)最完美的银择,但由于實(shí)際開發(fā)中復(fù)雜界面如果采用百分比,無(wú)疑增加了層級(jí)復(fù)雜度谨履,反而降低了性能欢摄,降低了可維護(hù)性和擴(kuò)展性。
2. layout中使用的dp/sp值采用@dimen引用方式寫進(jìn)dimens.xml里面笋粟;為了方便采用多個(gè)values文件夾例如values-sw600dp怀挠,values-1280x720等針對(duì)特定屏幕適配析蝴。自然也可以采用layout-1280x720這樣的來(lái)區(qū)分不同布局,但如果只是尺寸上的適配绿淋,無(wú)疑用dimens維護(hù)幾套尺寸值是最容易的闷畸,還可以寫個(gè)讀寫文件工具,修改一個(gè)values里的dimens文件后更新到所有的values文件吞滞;
3. 以上面的華為榮耀平板為例佑菩,采用sw(smallwidth)的方式進(jìn)行適配,比較簡(jiǎn)單的計(jì)算方式裁赠,以mdpi(160)為標(biāo)準(zhǔn)殿漠,此平板的screenWidthDips = 1200/(320/160) = 600dp,所以values-sw600dp可以適配此平板(有的平板系統(tǒng)寬高是包含屏幕的虛擬按鍵的高度);
4. 為了苛求在不同尺寸平板上的體驗(yàn)佩捞,采用values-1200x1920,values-1600x2560這種方式绞幌,即為每個(gè)屏幕增加尺寸適配,工作量和效率來(lái)說不會(huì)影響太大一忱,畢竟可以通過軟件工具生成多套莲蜘;
除了界面方面,平板開發(fā)上的模塊化采用Fragment更多帘营,以及Fragment嵌套Fragment:
5. Fragment中調(diào)用startActivityForResult票渠,如果要在Fragment的onActivityResult里回調(diào)處理,那么不要采用getActivity().startActivityForResult方法芬迄,且宿主Activity如果重寫了onActivityResult方法的问顷,必須調(diào)用super.onActivityResult,否則Fragment的onActivityResult方法不會(huì)回調(diào)薯鼠,這點(diǎn)可以從Activity的源碼中看出來(lái)择诈;
6. 嵌套在Fragment里的子Fragment的onActivityResult如果需要回調(diào)則要自己處理;
7. Fragment嵌套Fragment時(shí)出皇,在Fragment里采用getChildFragmentManager()管理子Fragment,用法跟getSupportFragmentManager()一樣哗戈;子Fragment之間的通信郊艘,可以采用事件總線方案進(jìn)行解耦,例如Otto/EventBus唯咬,但可讀性會(huì)下降纱注,所以詳細(xì)的注釋還是必要的;