1袄简、GridView的ItemView里的Margin無作用登舞。
? ? ? 原因:GridView屬于AbsListView的子類柬焕,而ItemView在getView的時候會取所屬父View(此處即GridView)的LayoutParams為自己的View對象的LayoutParams竞慢,然后AbsListView類的LayoutParams里是不包含Margin屬性的汤纸,所以在生成ItemView的時候,在xml里定義的Margin值就被“吞掉”了骗绕。
? ? ? 解決方案:用GridView自帶的HorizontalSpacing和VerticalSpacing屬性來確定各ItemView之間的間隔藐窄。
2、Fragment內(nèi)的AdapterView的Adapter建議在onCreate回調(diào)實例化酬土,而不是在onCreateView回調(diào)處實例化荆忍。
? ? ? 原因:Fragment的View可能會在自身的生命周期內(nèi)多處被create和destroy,而Adapter身為關(guān)聯(lián)數(shù)據(jù)與View的中介撤缴,應(yīng)當是與Fragment實例共“生死”刹枉,而不是僅僅和Fragment的View共“生死”;當View被create或destroy的時候屈呕,Adapter應(yīng)當更新外部可能被改變的數(shù)據(jù)(如數(shù)據(jù)庫微宝、SharePreference或者文件之類的),而自身在內(nèi)存保存的數(shù)據(jù)則應(yīng)當不改變(如一些只在用戶交互時使用到的狀態(tài)表之類的無需永久存儲的數(shù)據(jù))虎眨,所以在onCreateView回調(diào)中只應(yīng)更新數(shù)據(jù)蟋软,而不是重新實例化Adapter。
3专甩、對于Resources類的getColor(id)钟鸵、getDrawable(id)之類的在自Android 6.0甚至5.1系統(tǒng)上就被聲明是deprecated的方法,如若不想每次調(diào)用時都手工區(qū)分SDK版本的話涤躲,可以使用v4 support包里的ContextCompat類的同名方法棺耍,它會幫你完成區(qū)分SDK版本然后調(diào)用不同方法的工作。
4种樱、如果需要獲得整個存儲空間(內(nèi)置存儲或外置存儲如tf卡蒙袍,而且是根目錄)的已用大小和總大小等,可以使用StatFs類嫩挤;但這個方法不支持查詢某個子文件夾的大小害幅,某個非根目錄的目錄的所占空間,仍舊需要遞歸遍歷其中所有文件岂昭,求和File對象的length()方法返回值來獲得以现;注意官方文檔有提到目錄的File對象的length()方法的返回值是不確定的,所以不要直接用文件夾的length()來作為文件夾大小约啊。
5邑遏、要在后臺定時執(zhí)行耗時操作的時候,可以考慮使用HandlerThread和Handler來實現(xiàn)恰矩。
6记盒、在使用Android Studio進行開發(fā)的時候,在界面設(shè)計時外傅,可以使用tools命名空間來協(xié)助在編輯器中預(yù)覽界面效果纪吮,如在各類AbsListView中添加tools:listitem來預(yù)覽自定義的ItemView在其中的界面效果俩檬;tools命名空間的可用屬性包括所有android命名空間的可用屬性,而且由于目前Android Studio還不支持tools命名空間屬性的自動補全碾盟,所以建議先使用android命名空間寫好屬性再替換命名空間為tools棚辽;而且tools命名空間的屬性僅用于也僅有效于在IDE開發(fā)時的預(yù)覽效果,在打包后巷疼、運行中的應(yīng)用里晚胡,是完全不含tools命名空間的屬性的。